3 に答える
(?!xyz)
したいがしたくない簡単な例は(?!xyz)(?<!xyz)
正規表現xyz(?!xyz)
で、xyz
すぐに別のxyz
. で試してみると、xyz(?!xyz)(?<!xyz)
一致しないことがわかります。(?<!xyz)
がチェックされているポイントの前には常に がありますxyz
。これは、ちょうど一致したためです。
あなたはポイントを逃しています、私は恐れています。
後読みはパターン内の場所の前に文字をチェックすることであり、先読みは後の文字をチェックすることです。
abc(?!xyz)
abc
の後に が続いていないかどうかをチェックします。xyz
これは理にかなっていabcxyzz
ます。
(?<!xyz)abc
は の前の文字をチェックしabc
、 に一致がありますabcxyzz
(こちらを参照)。
では、abc(?!xyz)(?<!xyz)
は(?<!xyz)
常に真なので意味がありません ( はありますがabc
、 はありませんxyz
)。abc(?!xyz)(?<!xyz)
= abc(?!xyz)
.
では(?!xyz)(?<!xyz)abc
、 はではない(?!xyz)
ため、この部分は常に true です。= .abc
xyz
(?!xyz)(?<!xyz)abc
(?<!xyz)abc
あなたが提案する方法で後読みで先読みを使用しても意味がありません。それはオーバーヘッドを追加し、パフォーマンスを低下させて統合をもたらさず、エンジンに苦痛をもたらします。