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

消极前瞻的怪异行为

  •  1
  • username  · 技术社区  · 7 年前

    我有以下字符串: "text before AB000CD000CD text after" this

    AB((?!CD).)*CD
    

    我查了一下结果 https://regex101.com/ 输出为:

    Full match  12-19   `AB000CD`
    Group 1.    16-17   `0`
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   Community CDub    4 年前

    AB((?!CD).)*CD 比赛 AB ,然后是任意字符 这并不是开始 CD 光盘 .这就是你说错话的地方 “后面没有CD” .请注意,负展望位于 之前 这个 . .

    tempered greedy token 当取反部分与尾随边界相同时,只需使用延迟点匹配模式, AB(.*?)CD (初始边界) AB公司 光盘 AB((?:(?!AB).)*?)CD (这是最常见的用例)。

    看见 rexegg.com reference 关于何时使用:

    {END} ,但我们也需要避免跨过 {MID} 节(如果存在)。从懒惰的点星版本开始,以确保我们符合 {MID} :

    {START}(?:(?!{MID}).)*?{END}

    如果必须避免使用更多短语,我们只需将它们添加到我们的调和点:

    {START}(?:(?!{MID})(?!{RESTART}).)*?{END}

    而且 see this thread .

    推荐文章