正则表达式在负面问题背后(环顾四周)向前看



我无法理解负正则表达式向前看/向后看。我从阅读教程中得到的印象是,当您设置要查找的条件时,这些条件不会构成搜索匹配的一部分。

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

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

带输入

And.txt

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

^A.*(?!.txt$)

带输入:

A.txt

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

PS:如果你要问我哪种语言。我不知道。我们被告知使用正则表达式而不对任何特定语言进行任何特定引用。我尝试单击 regex101.com 上的各种选项,它们都是一样的。

环顾四周只尝试匹配其当前位置。

您在字符串(?<!^And).*.txt$的开头使用后视,在字符串^A.*(?!.txt$)的末尾使用前瞻,这将不起作用。(.*将始终消耗整个字符串,因为它是第一个匹配项(

例如,要禁止"And",您可以将前瞻放在字符串的开头,并在字符串中.*贪婪量词,以便扫描整个字符串:

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

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

你的理解是正确的,问题不在于向后看/向前看。问题在于在两种情况下都与整个字符串匹配的.*。句点.匹配任何字符,然后跟*,使其匹配任何长度的整个字符串。删除它,你们两个正则表达式都将起作用:

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

最新更新