匹配字符串但不包含另一个字符串

aas*_*tic 0 regex perl

我正在寻找匹配[ERROR]但不是匹配的正则表达式[ERROR].*Internal Error.我不是很擅长正则表达式.但我试过这个并没有用: -

\[ERROR\].*(?!.*[Ii]nternal [Ee]rror).
Run Code Online (Sandbox Code Playgroud)

有什么建议?

ike*_*ami 5

反对[ERROR] Internal Error,您的模式匹配如下:

    +------------------------ pos  0, len  7  "[ERROR]"
    |    +------------------- pos  7, len 15  " Internal Error"
    |    |             +----- pos 22, len  0  ""
    |    |             |
 ___|___ |  ___________|____________
/       \/\/                        \
\[ERROR\].*(?!.*[Ii]nternal [Ee]rror)
Run Code Online (Sandbox Code Playgroud)

你需要确保Internal Error不会在之后的任何位置开始[ERROR].

/\[ERROR\](?:(?![Ii]nternal [Ee]rror).)*\z/s
Run Code Online (Sandbox Code Playgroud)

(?:(?!STRING).)*就是STRING因为[^CHAR]*CHAR


也就是说,\z允许您将以上内容简化为以下内容:

/\[ERROR\](?!.*[Ii]nternal [Ee]rror)/s
Run Code Online (Sandbox Code Playgroud)