現代の正規表現の表現力


9

私は最近、主に単語のグループを特別なプロパティと照合する正規表現の課題を提案するWebサイトについて友人と話し合いました。彼は||||||||、数|が素数であるような文字列に一致する正規表現を探していました。そのような言語は、通常であれば、補題をポンプの翻訳が素数のためにあるという事実与えますので、私はすぐにそれが今まで動作しません彼に言われた十分な大きさ、それが存在するのk pがあるようP + N kは、すべての主要ですN - 1、よく、これは全くケースしにくい(素数の配分、そのような未知の自明とプロパティを破砕、...)pkpp+nkn1

しかし、誰かが解決策に付属している:一致しない(||+?)\1+ キャプチャグループに一致するように、この表現しようとする(つまりすることができ|||||||||などの上の出現箇所)のn 2回。一致する場合、文字列で表される数はkで割り切れるので、素数ではありません。それ以外の場合です。k2|n2k

そして、グループ化と後方参照により、正規表現が理論的な意味で...正規表現よりも実際にはるかに表現力豊かになることが明らかになったので、私は愚かに感じました。今では、実際の正規表現を実行するときに私が知らなかったルックアラウンドやその他の演算子も追加されました。

ウィキペディアによると、文脈自由文法によって生成された言語よりもさらに表現力があります。だからここに私の質問があります:

  • 現代の正規表現エンジンを使用して、(文脈自由文法から生成された)代数言語を表現できますか
  • より一般的な説明、または現代の正規表現で説明できる言語の種類の複雑さの少なくとも上限はありますか?

より実用的には、その背後に深刻な理論がありますか、それとも有限オートマトンに基づく実際の正規表現の最初のブロックに実装可能と思われるたびに新しい機能を追加するだけですか?

「モダンな正規表現」は質問が具体的ではないことを知っていますが、少なくとも後方参照を使用することを意味します。もちろん、この「現代の正規表現」言語に対する特定の制限を想定している部分的な回答者がいる場合は、遠慮なく投稿してください。


1
関連する質問。少なくともいくつかのRegExpフレーバーはチューリング完全であることを覚えているようです。この記事は、文献調査の有効な出発点になる場合があります。
ラファエル

@Raphaelは多くに感謝します、記事は私の尋問の大部分に答えるようです
yago


すべてのp + nkが素数ではない理由のより強い理由は、n = pの場合、p + nk = p(1 + k)になることです。
Nathan FD

回答:


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.