重叠正则表达式

时间:2013-03-21 14:25:37

标签: java regex regex-lookarounds

我发现了一个类似的问题here。但是我没有让它发挥作用:

我有一个像“my_token_string”这样的字符串,需要一个正则表达式来返回标记“my_”,“_ token_”和“_string”。

请注意,我无法更改java代码,因为它是另一个软件的一部分。我唯一能做的就是指定要捕获的模式和组: - )

这是我测试过的:

String p = "(?=(_[^_]*_?))";
int group = 1;
String test = "my_token_string";

Matcher m = Pattern.compile(p).matcher(test);
while (m.find()) {
    System.out.println(m.group(group));
}

但当然这只返回令牌“_token_”和“_string”。

2 个答案:

答案 0 :(得分:4)

您可以尝试使用"(?=((^|_).+?(_|$)))"。由于组号使用1

它会让令牌以_或输入开头(^)开头,并以_或输入结束($)结束。您可以使用.+?代替[^_]+,但我更喜欢此版本。

答案 1 :(得分:3)

您可以使用RegEx实现此目的:(?=((?:_|^)[^_]*+(?:_|$)))
在此解释演示:http://regex101.com/r/tB0bZ4