【问题标题】:Overlapping regular expression重叠正则表达式
【发布时间】:2013-03-21 14:25:37
【问题描述】:

我发现了一个类似的问题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”。

【问题讨论】:

    标签: java regex regex-lookarounds


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • +1 无论如何都不需要非捕获组,因为它们在 OP 将使用的组内,而不是在它之前。
      猜你喜欢
      • 2014-08-11
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多