PCRE は、{a^n b^n c^n; のような文脈依存の文法に一致しますか?

Susan Sarandon
リリース: 2024-10-23 01:06:03
オリジナル
995 人が閲覧しました

Can PCRE Match Context-Sensitive Grammars Like {a^n b^n c^n;?

文脈依存文法と PCRE のマッチング: A^n B^n C^n (例: "aaabbbccc")

通常式は伝統的に正規文法の解析に関連付けられていましたが、PCRE のような最新の実装では拡張機能が提供されています。これにより、次のような疑問が生じます。PCRE を使用して、より複雑な状況依存の文法を解析できるでしょうか?

具体的には、状況依存の文法 {a^n b^n c^n; に従って文字列を照合するという課題を検討してみましょう。 n > 0} (例: "aaabbbccc")。

正規表現の解決策:

NullUserException の最初の試みに触発されて、次の正規表現を考案しました:

~^
(?=(a(?-1)?b)c)
a+(b(?-1)?c)
$~x
ログイン後にコピー

説明:

  • 外側のセクション ~^...$~ は、文字列が目的のパターンで開始および終了することを保証します。
  • 括弧内, ~?(a(?-1)?b)c~ は、as と bs が等しいかどうかをチェックする肯定先読みアサーションです。
  • ~a ~ は任意の数の as に一致します。
  • ~b(?-1)?c~ は、cs が後に続く等しい数の bs に一致します。
  • (?-1) の (?-) を使用すると、as と bs の任意のシーケンスを一致させることができます。先読みアサーションを満たします。

テスト ケース:

次のようなさまざまな入力に対して正規表現をテストしました。

  • "aabbcc " - 正常に一致しました
  • "aaabbbccc" - 正常に一致しました
  • "aaabbbcc" - 一致しません(正しい)
  • "aaaccc" - 一致しません(正しい)
  • "aabcc" - 一致しない (正しい)
  • "abbcc" - 一致しない (正しい)

結論:

この正規表現は、最新の正規表現の驚くべき能力を示しており、通常の文法を超えて、{a^n b^n c^n} のような文脈依存の文法にも一致します。より複雑なパターンを解析できるこの機能により、正規表現アプリケーションの新たな可能性が開かれます。

以上がPCRE は、{a^n b^n c^n; のような文脈依存の文法に一致しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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