我无法理解负正则表达式向前看/向后看。我从阅读教程中得到的印象是,当您设置要查找的条件时,这些条件不会构成搜索匹配的一部分。
这似乎适用于我尝试过的正面前瞻示例,但是当我尝试这些负面示例时,它与整个测试字符串匹配。 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$)