java正则匹配括号对以及其他成对出现的模式
最近,我们有个⼤调整,为了控制代码的质量,需要使⽤⼀些伪代码让业务⼈员编写应⽤逻辑(其实这么做完全是处于研发效能的考
虑,95%以上的代码不需要特别注意都不会导致系统性风险,),然后通过⼯具⾃动⽣成实际的java和SQL代码,其中有个关键点就是处理其中的变量和参数,我们使⽤了特定的模式进⾏处理,典型的伪代码类似如下:
set@机构编号# =@操作员机构编号#;
[原⼦_系统状态检查]
[原⼦_市场检查]
时间正则表达式java[原⼦_权限检查]
set@交易⽇期# =@初始化⽇期#;
[原⼦_交易⽇期检查]
[原⼦_交易时间检查]
[事务_证券订单重复检查]
#订单批号⼩于0,⽤于⽼系统的对接. 获取产品资产账户和股东代码
if@订单批号# <0then
[原⼦_交易单元获取产品序号资产账户股东代码]
else
[原⼦_账户检查]
[原⼦_校验交易单元的操作权限]
end if;
[原⼦_交易单元业务权限判断]
if@指令序号# <>0then
[事务_证券订单交易校验指令业务]
end if;
[原⼦_证券订单代码校验]
if@订单⽅向# =1then
[原⼦_证券订单计算费⽤]
end if;
[原⼦_证券订单业务校验]
[原⼦_交易端证券业务合规判断]
[检查报错返回][@合规触发类型# = 4][1][concat("订单触发风控合规禁⽌条件:", @合规触发信息#)]
我们需要解析出其中的变量和参数,因为我们不打算让⼯具去控制逻辑语法,所以只要翻译出即可,⽐如[检查报错返回][@合规触发类型# = 4][1][concat("订单触发风控合规禁⽌条件:", @合规触发信#)]要解析出”检查报错返回“是宏,后⾯的是参数,@合规触发类型#是变量。可使⽤正则表达式如下:
public static void main(String[] args) {
System.out.println("解析宏: ");
parseMacro();
System.out.println("解析标准字段: ");
parseField();
}
/**
*
*/
private static void parseField() {
String str = "[检查报错返回][@合规触发类型# = 4][1][concat(\"订单触发风控合规禁⽌条件:\", @合规触发信息#)]";
String regex = "\\@.*?\\#";
Pattern pattern = Patternpile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println("replace: "+placeAll(regex, "matcher "));
while (matcher.find()) {
System.out.println("matcher: " + up(0));
}
}
/**
*
*/
private static void parseMacro() {
String str = "[检查报错返回][@合规触发类型# = 4][1][concat(\"订单触发风控合规禁⽌条件:\", @合规触发信息#)]";
String regex = "\\[.*?\\]";
Pattern pattern = Patternpile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println("replace: "+placeAll(regex, "matcher "));
while (matcher.find()) {
System.out.println("matcher: " + up(0));
}
}
结果如下:
解析宏:
replace: matcher matcher matcher matcher
matcher: [检查报错返回]
matcher: [@合规触发类型# = 4]
matcher: [1]
matcher: [concat("订单触发风控合规禁⽌条件:", @合规触发信息#)]
解析标准字段:
replace: [检查报错返回][matcher = 4][1][concat("订单触发风控合规禁⽌条件:", matcher )] matcher: @合规触发类型#
matcher: @合规触发信息#
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论