我有以下形式的正则表达式:
/(something complex and boring)?(something complex and interesting)/
我对第二个括号的内容感兴趣;第一个只是为了确保正确的匹配(因为无聊的部分可能存在或可能不存在,但如果存在,我会偶然将它与正则表达式匹配到有趣的部分)。
所以我可以使用$ 2访问第二场比赛。然而,为了与其他正则表达式的一致性,我正在使用我希望以某种方式$ 1将包含第二个parethesis的内容。有可能吗?
答案 0 :(得分:18)
使用非捕获组:
r = /(?:ab)?(cd)/
答案 1 :(得分:9)
这是一个非ruby regexp功能。使用/(?:something complex and boring)?(something complex and interesting)/
(请注意?:
)来实现此目的。
顺便说一句,在Ruby 1.9中,您可以执行/(something complex and boring)?(?<interesting>something complex and interesting)/
并使用$~[:interesting]
访问该组;)
答案 2 :(得分:2)
是的,请使用?:
语法:
/(?:something complex and boring)?(something complex and interesting)/
答案 3 :(得分:1)
我不是红宝石开发者,但我知道其他正则表达式。所以我打赌你可以使用非捕获组
/(?:something complex and boring)?(something complex and interesting)/
只有一个捕获组,因此$ 1
HTH
答案 4 :(得分:-4)
不是,不。但是您可以使用命名组来实现一致性,如下所示:
/(?<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