私はこの正規表現を持っています。部品を並べ替えるための彼の技術の間Ruby 1.9の正規表現は文脈自由文法に同等に強力ですか?</p>私は複数の文字列に対してテスト <pre><code>regex = %r{A(?<foo> ag<foo>a | bg<foo>b | c)Z}x </code></pre> <p>、適切に再帰を処理するため、文脈自由文法ほど強力であるように思われる:
sentence = %r{
(?<subject> cat | dog | gerbil ){0}
(?<verb> eats | drinks| generates){0}
(?<object> water | bones | PDFs ){0}
(?<adjective> big | small | smelly ){0}
(?<opt_adj> (\g<adjective>\s)? ){0}
The\s\g<opt_adj>\g<subject>\s\g<verb>\s\g<opt_adj>\g<object>
}x
:
regex.match("aaacaaa")
# => #<MatchData "aaacaaa" foo:"aaacaaa">
regex.match("aacaa")
# => #<MatchData "aacaa" foo:"aacaa">
regex.match("aabcbaa")
# => #<MatchData "aabcbaa" foo:"aabcbaa">
regex.match("aaacaa")
# => nil
「Fun with Ruby 1.9 Regular Expressions」は、次のように、それは文脈自由文法のように見えるように、彼が実際に正規表現のすべての部分を配置例を持っていますと、再帰的な名前付きのキャプチャグループの私の例では、これはRuby 1.9の正規表現が文脈自由文法に等しいパワーを持つことを意味しますか?
これは私がhttp://stackoverflow.com/questions/2626605/generalizing-the-pumping-lemma-for-unix-style-regular-expressions/2661176#2661176 –