ホームページ  >  記事  >  バックエンド開発  >  可変長後読みアサーション: 正規表現の将来?

可変長後読みアサーション: 正規表現の将来?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 09:11:29532ブラウズ

 Variable-Length Lookbehind Assertions: The Future of Regular Expressions?

正規表現における可変長後読みアサーション

正規表現は強力なパターン マッチング機能を提供しますが、可変長後読みアサーションの実装には、

後読みアサーションの実装

現在、可変長の後読みアサーションは 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 の正規表現に似た強化された正規表現モジュールを採用する可能性があります。

    代替手段の制限

    • K はそれほど柔軟ではありません
    • 否定先読みはより複雑になる可能性があり、すべての正規表現エンジンでサポートされているわけではありません。

    追加の質問

    • K の効果のエンドポイントを指定することは可能ですか?
    • Python の正規表現に似た、Perl、Ruby、JavaScript、および PHP 用の拡張正規表現実装はありますか?

    以上が可変長後読みアサーション: 正規表現の将来?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。