/(?<!foo.*)bar/ などの可変長後読みアサーションを使用できます。パターンに先行する可変数の文字について特定の条件が満たされる場合に、パターンと一致します。 Python の regex モジュールなどの一部の正規表現実装は可変長後読みアサーションをサポートしていますが、他の実装で使用できる代替手段もあります。
One可変長後読みアサーションの代わりに K 文字を使用します。 K は、後続の一致が最終的にキャプチャされた文字列の一部とみなされるべきではない正規表現内のポイントをマークします。たとえば、次の正規表現:
s/unchanged-part\Kchanged-part/new-part/x
は、文字列「unchanged-partchanged-part」内の部分文字列「changed-part」と一致し、それを「new-part」に置き換えます。ただし、文字列の「変更されていない部分」部分は置換には含まれません。
一方、K は、次の可変長後読みアサーションの近似に使用できます。一致しますが、それほど柔軟ではありません。たとえば、K を使用する負の後読みアサーションに相当するものはありません。
負の後読みアサーションは、パターンに先行する可変数の文字について特定の条件が満たされない場合に、パターンと一致します。次の正規表現は、前に「foo」がない場合にのみ、負の後読みアサーションを使用して文字列「bar」と一致します。
/(?<!foo.*)bar/
可変長の後読みアサーションを使用しないこの式の近似は、次のようになります。
s/^(?:(?!foo).)*\Kbar/moo/s;
Perl、Ruby、JavaScript、および PHP の標準正規表現実装は可変長後読みアサーションをサポートしていませんが、拡張正規表現があります。次の各言語で使用できる式の実装:
これらの強化された正規表現実装は、可変長後読みアサーションのサポートを含む追加機能と最適化を提供します。
以上が可変長後読みアサーションを使用せずに、正規表現で可変長後読みアサーションの機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。