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): 比如,我要匹配 串内 ...
随机推荐
- Android事件分发机制浅谈(一)
---恢复内容开始--- 一.是什么 我们首先要了解什么是事件分发,通俗的讲就是,当一个触摸事件发生的时候,从一个窗口到一个视图,再到一个视图,直至被消费的过程. 二.做什么 在深入学习android ...
- (转)从0开始搭建SQL Server AlwaysOn 第一篇(配置域控+域用户DCADMIN)
原文地址: http://www.cnblogs.com/lyhabc/p/4678330.html 实验环境: 准备工作 软件准备 (1) SQL Server 2012 (2) Windows S ...
- 【swift】BlockOperation和GCD实用代码块
//BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...
- springMVC初始化绑定器
单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 propertyEditor为属性编辑器,此处我们选用 CustomDateEd ...
- mono for android 读取网络远程图片
布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...
- ENode简介与各种教学视频资源汇总(要进群这篇文章必看)
ENode是什么 ENode是一个.NET平台开源的应用开发框架,为开发人员提供了一套完整的基于DDD+CQRS+ES+(in-memory)+EDA架构风格的解决方案. ENode的特色是什么 解决 ...
- HTML5 & CSS3初学者指南(1) – 编写第一行代码
介绍 网络时代已经到来.现在对人们来说,每天上网冲浪已经成为一种最为常见的行为. 在网页浏览器中输入一段文本地址,就像http://www.codeproject.com,等待一下,网页就加载到浏览器 ...
- java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager
问题: 使用Springboot打包为war部署于Tomcat7中报错 java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringMa ...
- WCF学习之旅—HTTP双工模式(二十)
WCF学习之旅—请求与答复模式和单向模式(十九) 四.HTTP双工模式 双工模式建立在上文所实现的两种模式的基础之上,实现客户端与服务端相互调用:前面介绍的两种方法只是在客户端调用服务端的方法,然后服 ...
- 基于Caffe的DeepID2实现(上)
小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...