Java:正则表达式-命名捕获

 第一段代码:

String replacement = "${segment}";
String regexp = "/red(?<segment>.*)";

String path = "/red/blue/k.do";
String newPath = path.replaceAll(regexp, replacement);

System.out.println(newPath);

其执行结果:

/blue/k.do

 这段代码看起来不太好理解,实际上

String regexp = "/red(?<segment>.*)";

从正则表达式的含义上,等同于

String regexp = "/red.*";

 只不过,为方便提取匹配正则表达式的字符串,定义了一个叫segment的变量名而已

(?<segment>.*)

变量名需要用?<>包裹起来,同时这个变量名和它要匹配的正则表达式一起,再用()包裹起来。这种用法就叫命名分组。

上面的代码如果先拆分成如下代码,看起来会更清楚。第二段代码:

String regexp = "/red(?<segment>.*)";

String path = "/red/blue/k.do";
		
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(path);
matcher.find();

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

它的执行结果:

/blue/k.do

 第一段代码中,不但把匹配正则表达式的字符串找出来,并赋值给segment变量,还直接使用segment变量做替换。因此看起来比较复杂,不是很清晰。

参考文档

Java 正则表达式的捕获组(capture group)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值