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

Linda Hamilton
リリース: 2024-10-28 09:11:29
オリジナル
451 人が閲覧しました

 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 サイトの他の関連記事を参照してください。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!