相关疑难解决方法(0)

Ruby 1.9正则表达式对于无上下文语法同样强大吗?

我有这个正则表达式:

regex = %r{\A(?<foo> a\g<foo>a | b\g<foo>b | c)\Z}x
Run Code Online (Sandbox Code Playgroud)

当我针对几个字符串测试它时,它看起来像上下文无关语法一样强大,因为它正确处理递归.

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
Run Code Online (Sandbox Code Playgroud)

" Ruby 1.9正则表达式的乐趣 "有一个例子,他实际上安排了一个正则表达式的所有部分,使它看起来像一个无上下文的语法,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

在他重新排列正则表达式部分的技术和我的递归命名捕获组的例子之间,这是否意味着Ruby 1.9正则表达式具有与无上下文语法相当的能力?

ruby regex theory context-free-grammar oniguruma

13
推荐指数
1
解决办法
1258
查看次数

标签 统计

context-free-grammar ×1

oniguruma ×1

regex ×1

ruby ×1

theory ×1