代码之家  ›  专栏  ›  技术社区  ›  trueicecold

如何只捕获此regex中的第一个事件?[复制品]

  •  -1
  • trueicecold  · 技术社区  · 7 年前

    我有这根绳子:

    2+*+2+*+3+*+3+*
    

    这个正则表达式:

    (\d{1,3}\+\*\+\d{1,3})
    

    问题是,它捕获两个匹配项(2+ + 2和3 + +3),我需要它只捕捉第一次发生。

    我怎样才能改变我的正则表达式来匹配这个?

    以下是任何想要尝试的用户的regex101 URL:

    https://regex101.com/r/7G2adU/1/

    谢谢!!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alexander van Oostenrijk    7 年前

    如果将regex更改为:

    ^(\d{1,3}\+\*\+\d{1,3})
    

    然后只捕获第一个匹配。插入符号 ^ 是字符串锚的开始;它与输入字符串的开始匹配,以便只捕获其余regex的第一个匹配项。

    还有另一种选择。在你的例子中 https://regex101.com/r/7G2adU/1/ 您的regex如下:

    /(\d{1,3}\+\*\+\d{1,3})/ig
    

    这个 g 是全局标志;它告诉引擎在找到第一个匹配项后不要停止,而是继续,直到找不到更多匹配项为止。如果删除该标志,则只返回第一个匹配项。