java 正则匹配括号对以及其他成对出现的模式
最近,我们有个大调整,为了控制代码的质量,需要使用一些伪代码让业务人员编写应用逻辑(其实这么做完全是处于研发效能的考虑,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 正则匹配括号对以及其他成对出现的模式的更多相关文章
- java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- 通用且常用的Java正则匹配工具,用以检查邮箱名、电话号码、用户密码、邮政编码等合法性
一个通用且常用的Java正则匹配工具,用以检查邮箱名.电话号码.用户密码.邮政编码等合法性. import java.util.regex.Matcher; import java.util.rege ...
- java正则匹配
java正则提取需要用到Matcher类,下面给出案例示例供参考 需要提取车牌号中最后一个数字,比如说:苏A7865提取5,苏A876X提取6import java.util.regex.Matche ...
- 关于JAVA正则匹配空白字符的问题
今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下 \s 不支持全角 1.& ...
- 关于JAVA正则匹配空白字符的问题(全角空格与半角空格)
今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示“\u3000” ,这是什么? 这是全角空格!!! 查了一下 \s 不支持全角 1.& ...
- java:正则匹配Pattern,Matcher
一.正则匹配Pattern,Mather String s = "aa424fsfsd92lfjw2755097"; Pattern p = Pattern.compile(&qu ...
- java正则获取括号内的数据与排除括号内的数据
1.正则获取括号内的数据 /** * 获取指定字符串中括号内的内容,返回字符串数组 * @param content * @return */ public String[] getBracketCo ...
- java正则匹配${xxx} 排除单引号双引号内的内容,前提引号必须成对出现
public static void main(String[] a) { String wpp = "select 1, ${mark} '``this is, `/message22` ...
- java正则匹配 指定内容以外的 内容
今天,遇到一个需要 匹配出 指定内容以外的 内容的需求. 乍一看,需求貌视很简单啊,直接上 非贪婪模式的 双向零宽断言(有的资料上也叫 预搜索.预查.环视lookaround): 比如,我要匹配 串内 ...
随机推荐
- BPM的魅力何在?
BPM(Business Process Management , 企业流程管理平台) 是带动企业流程自动化的帮 手,也是最能忠实反应出企业作业流程问题症结的系统工具,在管理上,BPM可以让管理者利用 ...
- swift开发新项目总结
新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案 1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编 考虑到新项目 ...
- Android之使用文件进行IPC
一.文件进行IPC介绍 共享文件也是一种不错的进程间通信方式,两个进程通过读/写同一个文件来交换数据.在Windows上,一个文件如果被加了排斥锁将会导致其他线程无法对其进行访问,包括读写,而由于An ...
- iOS app内存分析套路
iOS app内存分析套路 Xcode下查看app内存使用情况有2中方法: Navigator导航栏中的Debug navigator中的Memory Instruments 一.Debug navi ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- [django]数据导出excel升级强化版(很强大!)
不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
- hexo+github搭建个人博客
最近用hexo+github搭建了自己的个人博客-https://liuyfl.github.io,其中碰到了一些问题,记录下来,以便查阅. hexo+github在win7环境下搭建个人博客:hex ...
- 12个小技巧,让你高效使用Eclipse
集成开发环境(IDE)让应用开发更加容易.它们强调语法,让你知道是否你存在编译错误,在众多的其他事情中允许你单步调试代码.像所有的IDE一 样,Eclipse也有快捷键和小工具,这些会让您感觉轻松许多 ...
- 钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match
今天研究钉钉的开放平台,结果一个demo整了半天,这帮助系统写的也很难懂.遇到两个问题: 1.首先是执行demo时报unable to find valid certification path to ...
- 整理Ajax的点点滴滴
最近看了下<Javascript高级程序设计>(第三版)关于Ajax部分,做了这篇笔记. 一.常规用法 第一步,创建XHR对象var xhr = new XMLHttpRequest(); ...