最近,我们有个大调整,为了控制代码的质量,需要使用一些伪代码让业务人员编写应用逻辑(其实这么做完全是处于研发效能的考虑,95%以上的代码不需要特别注意都不会导致系统性风险,),然后通过工具自动生成实际的java和SQL代码,其中有个关键点就是处理其中的变量和参数,我们使用了特定的模式进行处理,典型的伪代码类似如下:

set @机构编号# = @操作员机构编号#;
[原子_系统状态检查]
[原子_市场检查]
[原子_权限检查]
set @交易日期# = @初始化日期#;
[原子_交易日期检查]
[原子_交易时间检查]
[事务_证券订单重复检查]
#订单批号小于0,用于老系统的对接. 获取产品资产账户和股东代码
if @订单批号# < 0 then
[原子_交易单元获取产品序号资产账户股东代码]
else
[原子_账户检查]
[原子_校验交易单元的操作权限]
end if; [原子_交易单元业务权限判断]
if @指令序号# <> 0 then
[事务_证券订单交易校验指令业务]
end if;
[原子_证券订单代码校验]
if @订单方向# = 1 then
[原子_证券订单计算费用]
end if;
[原子_证券订单业务校验]
[原子_交易端证券业务合规判断]
[检查报错返回][@合规触发类型# = 4][][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 = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println("replace: "+str.replaceAll(regex, "matcher "));
while (matcher.find()) {
System.out.println("matcher: " + matcher.group(0));
}
} /**
*
*/
private static void parseMacro() {
String str = "[检查报错返回][@合规触发类型# = 4][1][concat(\"订单触发风控合规禁止条件:\", @合规触发信息#)]";
String regex = "\\[.*?\\]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
System.out.println("replace: "+str.replaceAll(regex, "matcher "));
while (matcher.find()) {
System.out.println("matcher: " + matcher.group(0));
}
}

结果如下:

解析宏:
replace: matcher matcher matcher matcher
matcher: [检查报错返回]
matcher: [@合规触发类型# = 4]
matcher: [1]
matcher: [concat("订单触发风控合规禁止条件:", @合规触发信息#)]
解析标准字段:
replace: [检查报错返回][matcher = 4][1][concat("订单触发风控合规禁止条件:", matcher )]
matcher: @合规触发类型#
matcher: @合规触发信息#

java 正则匹配括号对以及其他成对出现的模式的更多相关文章

  1. java 正则匹配空格字符串 正则表达式截取字符串

    java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...

  2. 通用且常用的Java正则匹配工具,用以检查邮箱名、电话号码、用户密码、邮政编码等合法性

    一个通用且常用的Java正则匹配工具,用以检查邮箱名.电话号码.用户密码.邮政编码等合法性. import java.util.regex.Matcher; import java.util.rege ...

  3. java正则匹配

    java正则提取需要用到Matcher类,下面给出案例示例供参考 需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6import java.util.regex.Matche ...

  4. 关于JAVA正则匹配空白字符的问题

    今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下    \s    不支持全角 1.& ...

  5. 关于JAVA正则匹配空白字符的问题(全角空格与半角空格)

    今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下    \s    不支持全角 1.& ...

  6. java:正则匹配Pattern,Matcher

    一.正则匹配Pattern,Mather String s = "aa424fsfsd92lfjw2755097"; Pattern p = Pattern.compile(&qu ...

  7. java正则获取括号内的数据与排除括号内的数据

    1.正则获取括号内的数据 /** * 获取指定字符串中括号内的内容,返回字符串数组 * @param content * @return */ public String[] getBracketCo ...

  8. java正则匹配${xxx} 排除单引号双引号内的内容,前提引号必须成对出现

    public static void main(String[] a) { String wpp = "select 1, ${mark} '``this is, `/message22` ...

  9. java正则匹配 指定内容以外的 内容

    今天,遇到一个需要 匹配出 指定内容以外的 内容的需求. 乍一看,需求貌视很简单啊,直接上 非贪婪模式的 双向零宽断言(有的资料上也叫 预搜索.预查.环视lookaround): 比如,我要匹配 串内 ...

随机推荐

  1. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  2. DBobjectsCompareScript(数据库对象比较).sql

    use master goIF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[func_CompareDBobjectsReColu ...

  3. [高性能MYSQL 读后随笔] 关于事务的隔离级别(一)

    一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做dd ...

  4. mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!

    mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...

  5. Android快乐贪吃蛇游戏实战项目开发教程-04虚拟方向键(三)三角形按钮效果

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们 ...

  6. Unity插件之plyGame教程:DiaQ对话系统

    本文为孤月蓝风编写,转载请注明出处:http://fengyu.name/?cat=game&id=296 DiaQ是plyGame旗下的一款对话及任务系统.拥有可视化的对话及任务编辑器,能够 ...

  7. 在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView

    背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5中创建GridView>中,我们学习了如何在 ASP.NET MVC 中实现 GridView,类似于 ASP.NET web ...

  8. Alcatraz 的安装和删除

    Xcode 所有的插件都安装在目录: ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ 你也可以手工切换到这个目录来删除插件 ...

  9. Android开发学习之路-机器学习库(图像识别)、百度翻译

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  10. angular2

    1 class两种写法 (1).直接写 class="{{}}"; (2).数组 arr[a,b,c] ng-class = "arr" 2.class和sty ...