用于匹配不包含单词的行的正则表达式

9 regex tortoisesvn

我有以下几行:

Message:Polarion commit Mon May 18 06:59:37 CEST 2009
Message:Polarion commit Fri May 15 19:39:45 CEST 2009
Message:424-18: use new variable
Message:Polarion commit Fri May 15 19:29:10 CEST 2009
Message:Polarion commit Fri May 15 19:27:23 CEST 2009
Message:000-00: do something else
Message:Polarion commit Fri May 15 17:50:30 CEST 2009
Message:401-103: added application part
Message:Polarion commit Fri May 15 17:48:46 CEST 2009
Message:Polarion commit Fri May 15 17:42:04 CEST 2009
Run Code Online (Sandbox Code Playgroud)

我希望得到所有不包含"Polarion"的行

我该怎么做?

ps:我看到:正则 表达式匹配的东西不是特定的子字符串, 但它对我没有帮助

pps:我正在尝试在tortoiseSVN中选择日志消息,我认为"负面看后"存在问题

Dan*_*ner 19

这种表达将完成这项工作.

^(?:.(?<!Polarion))*$
Run Code Online (Sandbox Code Playgroud)

它使用零宽度负向lookbehind断言来断言该字符串不包含"Polarion".

    ^                  Anchor to start of string
    (?:                Non-capturing group
        .              Match any character
        (?<!Polarion)  Zero-width negative lookbehind assertion - text to the
                       left of the current position must not be "Polarion"
    )
    *                  Zero or more times
    $                  Anchor to end of string

以下版本将仅在'n'之后执行断言 - 也许这会更快,也许更慢.

^(?:[^n]*|n(?<!Polarion))*$
Run Code Online (Sandbox Code Playgroud)


Ray*_*yes 9

如果您使正则表达式与您要查找的内容匹配,然后反转结果可能会更容易.

大多数使用Regex的工具允许您反转搜索结果,通常在V ert中调用选项'v' (保持i为case- I nsensitive):

例如

grep -v <search>
find /v <search>
Run Code Online (Sandbox Code Playgroud)

等等