40

使用 PCRE,如何构造一个仅在找不到字符串时才匹配的表达式。

如果我使用的是 grep (我不是),我会想要 -v 选项。

一个更具体的例子:我希望我的正则表达式匹配 iff 字符串foo不在字符串中。所以它会匹配barwould 但不匹配foobar

4

5 回答 5

67

好的,我已经根据您提出的解决方案改进了我的正则表达式(它错误地匹配以 'test' 开头的字符串)。

^((?!foo).)*$

此正则表达式将仅匹配不包含 foo 的字符串。第一个前瞻将拒绝以 'foo' 开头的字符串,第二个将确保在字符串的其他地方找不到 foo。

于 2009-06-05T19:08:48.577 回答
5

根据丹尼尔的回答,我想我有一些有用的东西:

^(.(?!test))*$

关键是您需要对字符串中的每个字符进行否定断言

于 2009-06-05T18:44:17.253 回答
1

它确实几乎是重复的。我猜你正在寻找的正则表达式是

(?!foo).*

于 2009-06-05T18:37:46.783 回答
1

构建一个匹配的表达式,并使用 !match()...(逻辑否定)这可能就是 grep 无论如何...

于 2009-06-05T19:05:26.633 回答
-1

您也可以通过使用re.split, 并根据您的正则表达式拆分来执行此操作(在 python 中),从而返回所有与正则表达式不匹配的部分,根据与正则表达式不匹配的部分进行拆分

于 2011-03-02T23:15:38.047 回答