java正则匹配第一个符合的_java正则贪婪匹配指定字符开头和结尾或括号中内容...

项目中需要这样二种场景,需要贪婪匹配一个字符串,按照相应的匹配规则,替换指定的字符。

一、场景一匹配规则

1.中括号开头紧接2位数字

2.中间部分任意

3.右中括号结尾

代码如下:

String str = "[05经销商风险等级:低风险][06客户户籍地风险等级:中高风险][06销售风险等级:中风险][01不符合增信退回要求][02人行与申请提供手机号码不一致]";

//正则

Pattern pattern=Pattern.compile("\\[\\d{2}.*?\\]");

Matcher matcher = pattern.matcher(str);

StringBuffer stringBuffer = new StringBuffer(512);

while (matcher.find()) {

StringBuilder sb = new StringBuilder(matcher.group(0));

System.out.println(matcher.group());

if (StringUtils.isBlank(sb) || sb.length() <= 2) {

continue;

}

//替换第2,3位为空

sb.replace(1, 3, "");

System.out.println(sb.toString());

}

输出结果:

[05经销商风险等级:低风险]

[经销商风险等级:低风险]

[06客户户籍地风险等级:中高风险]

[客户户籍地风险等级:中高风险]

[06销售风险等级:中风险]

[销售风险等级:中风险]

[01不符合增信退回要求]

[不符合增信退回要求]

[02人行与申请提供手机号码不一致]

[人行与申请提供手机号码不一致]

二、场景二匹配规则

1.匹配()中的内容

代码如下:

//正则

Pattern pattern = Pattern.compile("(?<=\\()(.+?)(?=\\))");

matcher = pattern.matcher("06客户户籍地风险等级(低风险)师12(中高风险)(人行与申请提供手机号码不一致)风险(中风险)01不符合增信退回要求(不符合增信退回要求)01不符合增信退回要求");

while(matcher.find())

System.out.println(matcher.group());

输出结果:

低风险

中高风险

人行与申请提供手机号码不一致

中风险

不符合增信退回要求