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