首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在正则表达式^(?!.*?spam)中需要字符^来过滤字符串?

为什么在正则表达式^(?!.*?spam)中需要字符^来过滤字符串?
EN

Stack Overflow用户
提问于 2019-02-11 15:43:58
回答 2查看 115关注 0票数 0

我尝试过滤不包含单词"spam“的字符串。我使用来自here的正则表达式!

但是我不明白为什么我在表达式的开头需要符号^。我知道它标志着正则表达式的开始,但我不明白为什么在我的例子中没有^它就不能工作?

UPD。下面的所有答案都非常有用。现在完全清楚了。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-02-11 15:50:36

正则表达式(?!.*?spam)匹配字符串中后面没有匹配.*?spam的位置。

每个字符串都有这样的位置,因为如果没有其他位置,字符串的末尾肯定不会跟任何与.*?spam匹配的内容。

因此,每个字符串都包含一个与正则表达式(?!.*?spam)匹配的字符串。

^(?!.*?spam)中的锚定^限制了正则表达式,以便它只匹配字符串开头没有任何匹配.*?spam的字符串-即根本不包含spam的字符串(或者至少第一行中的任何位置,这取决于.是否匹配换行符)。

票数 4
EN

Stack Overflow用户

发布于 2019-02-11 15:47:32

lookahead是一个零宽度断言(也就是说,它确保了字符串中的位置)。在你的例子中,它是一个负面的先行检查,确保后面不会有“零个字符,后面跟着垃圾邮件”。这对于字符串中的几个位置是正确的,请参见无锚点的。

有了锚点,匹配过程就从一开始就开始了,所以整个字符串都会被分析,参见regex101.com上的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54625955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档