正则表达式匹配字符串不包含单词,但包含其他单词

时间:2019-04-30 09:12:39

标签: regex

我想搜索包含某个单词的行,例如book,并且前面不包含car

我尝试这样写:

[?!car].*book

但是它不起作用,因此在这些行中:

this car is a book
this is a book
book car

第一个不匹配,其他两个不匹配。我在做什么错了?

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

1 个答案:

答案 0 :(得分:2)

您在这里

^(?:(?!car).)*book.*$

我使用了一个非捕获组来对正则表达式进行一次完整匹配,但是您可以根据需要使用它。

您使用的正则表达式在行中搜索字符集[?!car]中任何字符的第一个匹配项;这意味着?!被视为单个字符,而不是您原本打算的非捕获组。除非遇到book,否则后面的字符将被贪婪地捕获。这就是为什么Regex无法为您提供所需结果的原因。