textpad 8 具有多个条件的正则表达式

textpad 8 具有多个条件的正则表达式

我搜索了 superuser.com 上的所有 TextPad 正则表达式帖子,但未找到我的查询的答案。问题是——如何在 TextPad 8 文件搜索正则表达式中提供两个条件?具体来说,我想查找所有文件中包含字符串 Error 或 Warning 的所有行,我可以使用正则表达式来执行此操作error|warning,但除此之外,我还想仅选择那些行的子集,其中另一个指定的文本字符串(例如expir)不存在于行中的任何地方,无论是在第一个正则表达式中匹配字符串的位置之前还是之后。

&我尝试过在两个正则表达式之间放置类似或的连接词的各种形式&&,但找不到有效的语法。TextPad 正则表达式是否支持前向和后向零宽度断言?在 perl 中,我可以说

    (?<!expir).*?error|warning(?!.*?expir)

。我在 TextPad 中输入了该内容,没有出现任何错误,但也没有起作用。它选择了所有包含 或 的行,errorwarning没有排除同时包含 的行expir

答案1

这个正则表达式会找到你想要的:

^(?=(?:(?!expir).)*$).*(?:error|warning)

解释:

^                       : begining of line
    (?=                 : start lookahead
        (?:             : start non capture group
            (?!expir)   : negative lookahead, make sure w don'thave expir
                            You may want to add wordboundaries if you don't want to match "expiration"
                            (?!\bexpir\b)
            .           : any character but newline
        )*              : group may appear 0 or moe times
        $               : end of line
    )                   : end of lookahead
                            at this point we are sure we don't have "expir" in the line
                            so, go to match the wanted words
    .*                  : 0 or more any character but newline
    (?:                 : start non capture group
        error           : literally error, you could do "\berror\b" if you don't want to match "errors"
        |               : OR
        warning         : literally warning, you could do "\bwarning\b" if you don't want to match "warnings"
    )   

使用如下文件:

error
warning
abc expir 
abc expir warning
abc error expir def

它仅匹配第 1 行和第 2 行。

相关内容