Ruby正则表达式中的符号组名(如Python中的符号组名)

Ruby正则表达式中的符号组名(如Python中的符号组名),python,ruby,regex,Python,Ruby,Regex,在Python中遇到了这个方便的正则表达式实用程序(我是Python的初学者)。e、 g.通过使用regexp (?P<id>[a-zA-Z_]\w*) (完整文档:查找“符号组名称”) 在Ruby中,我们可以使用$1、$2或使用MatchData对象(m[1]、m[2]等)访问匹配的引用。Ruby中是否有类似于Python的符号组名的东西?较旧的Ruby版本没有命名组(请在评论中指出这一点!),但是,如果您使用的是Ruby 1.9…: (?subexp)也用Ruby表达式表示命名

在Python中遇到了这个方便的正则表达式实用程序(我是Python的初学者)。e、 g.通过使用regexp

(?P<id>[a-zA-Z_]\w*)
(完整文档:查找“符号组名称”)


在Ruby中,我们可以使用
$1、$2
或使用MatchData对象(
m[1]、m[2]
等)访问匹配的引用。Ruby中是否有类似于Python的符号组名的东西?

较旧的Ruby版本没有命名组(请在评论中指出这一点!),但是,如果您使用的是Ruby 1.9…:


(?subexp)
也用Ruby表达式表示命名组
\k
是您返回引用替换中的命名组的方式,如果这是您正在寻找的

Ruby 1.9引入了命名捕获:

m = /(?<prefix>[A-Z]+)(?<hyphen>-?)(?<digits>\d+)/.match("THX1138.")
m.names # => ["prefix", "hyphen", "digits"]
m.captures # => ["THX", "", "1138"]
m[:prefix] # => "THX"
m=/(?[A-Z]+)(?-?)(?\d+)/.match(“THX1138”)
m、 名称#=>[“前缀”、“连字符”、“数字”]
m、 捕获#=>[“THX”、“”、“1138”]
m[:前缀]#=>“THX”

您可以使用
\k
等作为反向引用

请注意,命名组是新Oniguruma正则表达式引擎的一个功能。它最近在Ruby 1.9中取代了Ruby旧的、动力不足的regex引擎,因此有很多参考资料没有跟上这一变化。1.8版有一个Oniguruma gem,不过你需要先安装Oniguruma才能使用它-谢谢-我搜索了一个但更多。Ruby 1.8可以使用Oniguruma库进行编译(Ruby 1.9可以选择使用较旧的Ruby 1.8正则表达式实现进行编译)。正则表达式Cookbook()谈到了这一点。是的,使用Oniguruma引擎。如果您使用的是1.8,并且由于某种原因无法使用Onigurama,那么Jim Weirich的库可能是一个有趣的替代方案
m = /(?<prefix>[A-Z]+)(?<hyphen>-?)(?<digits>\d+)/.match("THX1138.")
m.names # => ["prefix", "hyphen", "digits"]
m.captures # => ["THX", "", "1138"]
m[:prefix] # => "THX"