首页 > 解决方案 > 匹配同一组不同值的捕获组Regex

问题描述

有没有办法将组的正则表达式捕获为逻辑而不是反向引用捕获的值。

例如:以下正则表达式将捕获 IP = ABCD 的 IP 地址,其中 A、B、C、D 值的范围在 0 到 255 之间,但 A、B、C、D 不应该相等。如果我在以下代码中使用了反向引用:

Pattern ptr=  Pattern.compile(
"^(?<num>[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
[.]\\k<num>[.]\\k<num>[.]\\k<num>$");

然后,D 应该等于 C 应该等于 B 应该等于 A。

我需要再次匹配正则表达式组而不是值。每次我想像下面这样匹配时,我是否必须输入相同的组,或者是否有一种简化的方法。

Pattern ptr=  Pattern.compile(
"^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
[.]([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
[.]([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
[.]([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"
);

标签: regexregex-lookaroundsregex-group

解决方案


推荐阅读