【问题标题】:regex lazy matching + grouping正则表达式延迟匹配+分组
【发布时间】:2012-08-10 02:21:14
【问题描述】:

我遇到了正则表达式延迟匹配的问题。没有例子很难解释:

我的正则表达式:A\d*?(88)?\d*?B


示例 1:A12388456B

我想要的:匹配字符串,第 1 组匹配“88”

会发生什么:匹配字符串,但组 1 不匹配。


示例 2:A123B

我想要的:匹配字符串,组 1 不匹配。

会发生什么:正常工作


基本上我希望第 1 组匹配出现的“88”,但我也想匹配任何模式 A\d+B

这看起来应该很简单,但我遇到了麻烦。

【问题讨论】:

    标签: regex


    【解决方案1】:

    在 Javascript 中试用这个正则表达式:

     'A12388456B'.match(/A(?:\d*?(88))?\d*?B/);
     > ["A12388456B", "88"]  // Matches string and 88.
    
     'A123B'.match(/A(?:\d*?(88))?\d*?B/);
     > ["A123B", undefined]  // Matches string but nothing else.
    

    在第一个示例中,第 1 组捕获 88。

    【讨论】:

    • 您可以使用(?:) 语法使其成为非捕获组。
    【解决方案2】:

    您要匹配的第一个组未标记为组。

    你想要:

    (A\d*)?(88)?\d*?B

    那么你有两个子组和主匹配。

    【讨论】:

    • 我不希望 A 是可选的。这似乎也不起作用,我得到 group 1 = "A12388456", group 2 unmatched 例如 #1
    • 哦,我错了,我误解了第二种情况。
    【解决方案3】:

    使用正则表达式 A(?=\d*(88))\d*B,如果找到匹配项,组 1 将包含 88

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 2010-10-01
      • 2017-04-10
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 2019-01-13
      相关资源
      最近更新 更多