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

わかりやすく/単純にするために、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 に答える