正規表現における可変長後読みアサーション
正規表現は強力なパターン マッチング機能を提供しますが、可変長後読みアサーションの実装には、
後読みアサーションの実装
現在、可変長の後読みアサーションは Python の正規表現モジュールでサポートされています。構文は (?
<code class="python">>>> import regex >>> m = regex.search('(?<!foo.*)bar', 'f00bar') >>> print(m.group()) bar >>> m = regex.search('(?<!foo.*)bar', 'foobar') >>> print(m) None</p> <p><strong>後読みアサーションを使用しない代替</strong></p> <p>後読みアサーションがない場合、2 つの代替案があります:</p> <ul> <li> <p><strong>K (Keep):</strong> この記号は、その前にあるパターン内の点をマークします。一致した文字は置換またはグループ化の前に破棄されます。</p> <pre class="brush:php;toolbar:false">s/(?<=foo.*)bar/moo/s;
は次のようになります:
s/foo.*\Kbar/moo/s;
負の先読み: この手法では、負の値を使用します。 lookahead は、「foo」が存在しないことを確認します。
s/(?<!foo.*)bar/moo/s;
は次のようになります。
s/^(?:(?!foo).)*\Kbar/moo/s;
将来の実装
Perl や JavaScript などの主流言語には可変長の後読みアサーションがないため、将来の実装について疑問が生じています。いつかこれらの言語が Python の正規表現に似た強化された正規表現モジュールを採用する可能性があります。
代替手段の制限
追加の質問
以上が可変長後読みアサーション: 正規表現の将来?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。