正则表达式展望未来(环顾四周)负面问题

时间:2018-01-20 14:21:05

标签: regex regex-lookarounds

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

这似乎适用于我尝试的积极的前瞻性示例,但是当我尝试这些否定的时候,它匹配整个测试字符串。 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上的各种选项,它们都是相同的。

2 个答案:

答案 0 :(得分:1)

Lookarounds只会尝试匹配他们当前的位置。

您正在字符串(?<!^And).*\.txt$开头处使用lookbehind,并在字符串^A.*(?!\.txt$) end 处使用lookbehead,不行。 (.*将始终使用整个字符串,因为它是第一次匹配)

例如,要禁止“和”,您可以使用贪婪量词.* 内部放在字符串的开头,以便它扫描整个字符串:

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

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

答案 1 :(得分:0)

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

(?<!^And)\.txt$

^A(?!\.txt$)