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());

	输出结果:
	低风险
	中高风险
	人行与申请提供手机号码不一致
	中风险
	不符合增信退回要求

你可能感兴趣的:(regex,正则贪婪匹配,正则指定字符开头及结尾匹配)