一致する正規表現を探していますが、一致[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
わかりやすく/単純にするために、2 つの正規表現を使用します (!~ は「一致しない」ことを意味します)。
if ( ($a =~ /\[ERROR\]/) && ($a !~ /[Ii]nternal [Ee]rror/)) {
#do your stuff
}
(\[ERROR\])(?:.(?![Ii]nternal [Ee]rror))+.