私はこの正規表現を持っています:
regex = %r{\A(?<foo> a\g<foo>a | b\g<foo>b | c)\Z}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
「FunwithRuby1.9 Regular Expressions」には、次のように文脈自由文法のように見えるように、実際に正規表現のすべての部分を配置する例があります。
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
正規表現の一部を再配置するための彼の手法と、再帰的な名前付きキャプチャグループの例との間で、これは、Ruby 1.9の正規表現が文脈自由文法と同等の能力を持っていることを意味しますか?