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

regex展望(环顾四周)负面问题

  •  0
  • youknownothingjonsnow  · 技术社区  · 6 年前

    我在理解负regex lookahead/lookbehind时遇到困难。阅读教程给我的印象是,当您设置要查找的条件时,这些条件并不构成搜索匹配的一部分。

    这似乎适用于我尝试过的正面前瞻示例,但当我尝试这些负面示例时,它与整个测试字符串相匹配。1,它不应该匹配任何内容,2,即使匹配了,也不应该包含前瞻性标准??

    (?<!^And).*\.txt$
    

    有输入

    And.txt
    

    请参见: https://regex101.com/r/vW0aXS/1

    ^A.*(?!\.txt$)
    

    有输入:

    A.txt
    

    请参见: https://regex101.com/r/70yeED/1

    附言:如果你要问我哪种语言。我不知道。我们被告知要使用regex,而不要对任何特定语言进行任何特定的引用。我尝试单击regex101上的各种选项。他们都是一样的。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Scott Weaver    6 年前

    Lookarounds只会尝试在当前位置进行匹配。

    您正在对 开始 字符串的 (?<!^And).*\.txt$ ,并对 终止 字符串的 ^A.*(?!\.txt$) ,这行不通。( .* 将始终使用整个字符串作为第一个匹配项)

    例如,要禁止“And”,可以使用贪婪的量词在字符串的开头放置先行 .* 在…内 它可以扫描整个字符串:

     (?!.*And).*\.txt$
    

    https://regex101.com/r/1vF50O/1

        2
  •  0
  •   Racil Hilan    6 年前

    您的理解是正确的,问题不在于“向后看/向前看”。问题在于 .* 在这两种情况下都匹配整个字符串。期间 . 匹配任何字符,然后使用 * 这使得它匹配任何长度的整个字符串。删除它,两个正则表达式都可以工作:

    (?<!^And)\.txt$
    
    ^A(?!\.txt$)