我正在寻找匹配[ERROR]
但不匹配的正则表达式[ERROR].*Internal Error
。我不太擅长正则表达式。但我试过了,它没有用:-
\[ERROR\].*(?!.*[Ii]nternal [Ee]rror).
有什么建议么?
针对[ERROR] Internal Error
,您的模式匹配如下:
+------------------------ pos 0, len 7 "[ERROR]"
| +------------------- pos 7, len 15 " Internal Error"
| | +----- pos 22, len 0 ""
| | |
___|___ | ___________|____________
/ \/\/ \
\[ERROR\].*(?!.*[Ii]nternal [Ee]rror)
您需要确保它Internal Error
不会从 . 之后的任何位置开始[ERROR]
。
/\[ERROR\](?:(?![Ii]nternal [Ee]rror).)*\z/s
(?:(?!STRING).)*
照STRING
原样[^CHAR]*
_CHAR
也就是说,\z
允许您将上述内容简化为以下内容:
/\[ERROR\](?!.*[Ii]nternal [Ee]rror)/s
为了清楚/简单起见,使用两个正则表达式(!~ 表示“不匹配”)
if ( ($a =~ /\[ERROR\]/) && ($a !~ /[Ii]nternal [Ee]rror/)) {
#do your stuff
}
(\[ERROR\])(?:.(?![Ii]nternal [Ee]rror))+.