ruby中的Regexp-我可以不分组使用括号吗?

ruby中的Regexp-我可以不分组使用括号吗?,ruby,regex,Ruby,Regex,我有一个如下格式的regexp: /(something complex and boring)?(something complex and interesting)/ 我对第二个括号的内容感兴趣;第一个选项只是为了确保正确匹配(因为无聊的部分可能存在,也可能不存在,但如果存在,我会意外地将其与感兴趣部分的regexp匹配) 所以我可以用2美元进入第二场比赛。然而,为了与我正在使用的其他正则表达式保持一致,我希望$1包含第二个参数的内容。可能吗?不可能,不可能。但是您可以使用命名组来实现统一

我有一个如下格式的regexp:

/(something complex and boring)?(something complex and interesting)/
我对第二个括号的内容感兴趣;第一个选项只是为了确保正确匹配(因为无聊的部分可能存在,也可能不存在,但如果存在,我会意外地将其与感兴趣部分的regexp匹配)


所以我可以用2美元进入第二场比赛。然而,为了与我正在使用的其他正则表达式保持一致,我希望$1包含第二个参数的内容。可能吗?

不可能,不可能。但是您可以使用命名组来实现统一性,如下所示:

/(?<group1>something complex and boring)?(?<group2>something complex and interesting)/
string.match(/(?<group1>something complex and boring)?(?<group2>something complex and interesting)/) do |m|
    # Do something with the match, m['group'] can be used to access the group
end
/(?复杂而无聊的东西)?(?复杂而有趣的东西)/
您可以更改名称(尖括号中的文本)以获得想要达到的一致性。然后,您可以访问以下组:

/(?<group1>something complex and boring)?(?<group2>something complex and interesting)/
string.match(/(?<group1>something complex and boring)?(?<group2>something complex and interesting)/) do |m|
    # Do something with the match, m['group'] can be used to access the group
end
string.match(/(?复杂而乏味的东西)?(?复杂而有趣的东西)/)do | m|
#对匹配项执行某些操作,可以使用m['group']访问该组
结束

是的,使用
?:
语法:

/(?:something complex and boring)?(something complex and interesting)/

这是一个非ruby regexp特性。使用
/(?:一些复杂而无聊的东西)?(一些复杂而有趣的东西)/
(注意
?:
)来实现这一点


顺便说一句,在Ruby 1.9中,您可以执行
/(一些复杂而无聊的事情)?(?一些复杂而有趣的事情)/
,并使用
$~[:有趣的]
;)访问组

使用非捕获组:

r = /(?:ab)?(cd)/

我不是一个ruby开发者,但是我知道其他的正则表达式。所以我打赌你可以使用非捕获组

/(?:something complex and boring)?(something complex and interesting)/
只有一个捕获组,因此为1美元


HTH

感谢大家快速而富有启发性的回答!