0

我正在寻找匹配[ERROR]但不匹配的正则表达式[ERROR].*Internal Error。我不太擅长正则表达式。但我试过了,它没有用:-

\[ERROR\].*(?!.*[Ii]nternal [Ee]rror).

有什么建议么?

4

3 回答 3

5

针对[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
于 2013-10-04T15:08:13.137 回答
2

为了清楚/简单起见,使用两个正则表达式(!~ 表示“不匹配”)

if ( ($a =~ /\[ERROR\]/) && ($a !~ /[Ii]nternal [Ee]rror/)) {
    #do your stuff
}
于 2013-10-04T15:34:46.290 回答
-1

(\[ERROR\])(?:.(?![Ii]nternal [Ee]rror))+.

于 2013-10-04T15:05:52.737 回答