4

我在这里发现了一个类似的问题。但是我没有让它工作:

我有一个像“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”。

4

2 回答 2

4

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

它将让令牌以_输入或开始(^)开始,并以_输入或结束($)结束。而不是.+?你可以使用[^_]+,但我更喜欢这个版本。

于 2013-03-21T14:36:51.290 回答
3

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

于 2013-03-21T14:38:18.700 回答