我无法理解负面的正则表达式向前看/向后看。我从阅读教程中得到的印象是,当您设置要查找的条件时,标准不会构成搜索匹配的一部分。
这似乎适用于我尝试的积极的前瞻性示例,但是当我尝试这些否定的时候,它匹配整个测试字符串。 1,它不应该匹配任何东西,2即使它确实如此,也不应该包括前瞻标准?
(?<!^And).*\.txt$
带输入
And.txt
请参阅:https://regex101.com/r/vW0aXS/1
和
^A.*(?!\.txt$)
输入:
A.txt
PS:如果你要问我哪种语言。我不知道。我们被告知使用正则表达式而不特别提及任何特定语言。我尝试点击regex101.com上的各种选项,它们都是相同的。
答案 0 :(得分:1)
Lookarounds只会尝试匹配他们当前的位置。
您正在字符串(?<!^And).*\.txt$
的开头处使用lookbehind,并在字符串^A.*(?!\.txt$)
的 end 处使用lookbehead,不行。 (.*
将始终使用整个字符串,因为它是第一次匹配)
例如,要禁止“和”,您可以使用贪婪量词.*
将内部放在字符串的开头,以便它扫描整个字符串:
(?!.*And).*\.txt$
答案 1 :(得分:0)
您的理解是正确的,问题不在于外观/前瞻。问题是.*
与两种情况下的整个字符串匹配。句点.
与任何字符匹配,然后您使用*
跟随它,使其与任何长度的整个字符串匹配。删除它,你的正则表达式都可以工作:
(?<!^And)\.txt$
^A(?!\.txt$)