在此页面http://swtch.com/~rsc/regexp/regexp3.html上,它说 RE2 支持命名表达式。
RE2 支持 Python 风格的命名捕获
(?P<name>expr)
,但不支持 .NET 和 Perl 使用的替代(?<name>expr)
语法(?'name'expr)
。
ruby-1.9.2-p180 :003 > r = RE2::Regexp.compile("(?P<foo>.+) bla")
#=> #<RE2::Regexp /(?P<foo>.+) bla/>
ruby-1.9.2-p180 :006 > r = r.match("lalal bla")
#=> #<RE2::MatchData "lalal bla" 1:"lalal">
ruby-1.9.2-p180 :009 > r[1] #=> "lalal"
ruby-1.9.2-p180 :010 > r[:foo]
TypeError: can't convert Symbol into Integer
ruby-1.9.2-p180 :011 > r["foo"]
TypeError: can't convert String into Integer
但我无法使用名称访问匹配项,因此这似乎是一个无用的实现。我错过了什么吗?