我搜索了 superuser.com 上的所有 TextPad 正则表达式帖子,但未找到我的查询的答案。问题是——如何在 TextPad 8 文件搜索正则表达式中提供两个条件?具体来说,我想查找所有文件中包含字符串 Error 或 Warning 的所有行,我可以使用正则表达式来执行此操作error|warning
,但除此之外,我还想仅选择那些行的子集,其中另一个指定的文本字符串(例如expir
)不存在于行中的任何地方,无论是在第一个正则表达式中匹配字符串的位置之前还是之后。
&
我尝试过在两个正则表达式之间放置类似或的连接词的各种形式&&
,但找不到有效的语法。TextPad 正则表达式是否支持前向和后向零宽度断言?在 perl 中,我可以说
(?<!expir).*?error|warning(?!.*?expir)
。我在 TextPad 中输入了该内容,没有出现任何错误,但也没有起作用。它选择了所有包含 或 的行,error
但warning
没有排除同时包含 的行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 行。