【问题标题】:Why does the .NET regex search engine find only one single match?为什么 .NET 正则表达式搜索引擎只能找到一个匹配项?
【发布时间】:2017-06-01 23:31:26
【问题描述】:

应用于“456x56”的正则表达式(?=(\d+))\w+\1 仅找到一个匹配“56x56”。

为什么搜索引擎不再继续寻找下一个匹配“6x56”?

【问题讨论】:

  • 因为 56x56 的字符已经被 \w+\1 使用了。您无法再次匹配它们。
  • 那不是“下一场比赛”。它们重叠。它开始寻找下一个匹配在第一个匹配的结束之后。如果它按您想要的方式工作,那将毫无用处。

标签: c# .net regex


【解决方案1】:

\w+\1 已经使用了 56x56 的字符。您无法再次匹配它们。

如果您想一次搜索一个位置的字符串,则需要将所有模式放在前瞻中,例如:

(?=((\d+)\w*\2))

预期结果在捕获组 1 中。demo

由于前瞻是一个零宽度断言(换句话说,只是一个测试)它不消耗字符,因此正则表达式引擎将尝试字符串中的每个位置。

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多