代码之家  ›  专栏  ›  技术社区  ›  Augusto Hack

regex“/^something/”行为

  •  -1
  • Augusto Hack  · 技术社区  · 15 年前

    在某些不明确的情况下,像“/^match/”这样的正则表达式以精确的oposite方式工作,与“其他”行匹配,唯一解决方法是将整个regex放在大括号中…/^(匹配)/“,为什么会这样?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mark Byers    15 年前

    只是一个疯狂的猜测…我能想到的唯一一个例子就是你描述的行为正在改变:

    /^foo|bar/
    

    /^(foo|bar)/
    

    注意,括号的添加改变了这个正则表达式的含义。第二个匹配字符串开头的foo或bar。第一个匹配字符串或条的开头的foo 在任何地方 在字符串中。如您所描述的,这可能会产生一些错误的匹配。

    忘记那些括号很容易出错…有时我也会这样做……脸红……;)

    我现在想不出任何其他的例子,但我敢肯定,有时加上括号会使意思发生细微的变化。下次,记住保存您找到的示例并将其发布在这里,以便我们可以看到它。

        2
  •  0
  •   Tim Goodman    15 年前

    完全是随机猜测,但你是在 split ?

    在javascript中(我不太确定PHP),如果我键入:

    "matchabc".split(/^match/)

    我得到:

    ["", "abc"]

    注意split使用match来分割字符串,这样就可以得到不匹配的部分。

    但是,如果我这样做:

    "matchabc".split(/^(match)/)

    我得到:

    ["", "match", "abc"]

    这是因为括号捕捉了我要拆分的内容。这听起来有点像您描述的行为——如果您发布一个示例来说明这个问题(不仅仅是regex,而是您如何使用它以及它所作用的字符串),就更容易判断了。