2013-10-26 56 views
3

我已经得到了多个正则表达式,我想用Regexp.union将它们放在一个大的正则表达式结合起来,所以我有这样的正则表达式来表示为例:正则表达式工会逃脱我原来的正则表达式

^image\d*$ 

所以,我试试这个:

regex = %w(^image\d*$) 
=> ["^image\\d*$"] 
re = Regexp.union(regex) 
=> /\^image\\d\*\$/ 

而且它避开了我的正则表达式来/\^image\\d\*\$/所以当我尝试的基本情况不匹配:

"image0".match(re) 
=> nil 

我怎样才能得到这个?

+0

这是预期的行为:[红宝石正则表达式:单个正规表达式新和工会之间的差异(http://stackoverflow.com/questions/7784717/ruby-regexp-difference- –

+0

我投票保留开放,因为虽然其他问题确实回答了这个问题 - 有这个问题的其他人更有可能谷歌的上述问题,而不是问正则表达式unon如何工作。 –

回答

5

通过Regexp对象。 %w(...)是字符串文字。对于正则表达式,使用%r(...)/.../

regex = %r(^image\d*$) 
# => /^image\d*$/ 
Regexp.union(regex) 
# => /^image\d*$/ 

array_of_regexs = [/a/, /b/, /c/] 
# => [/a/, /b/, /c/] 
Regexp.union(array_of_regexs) 
# => /(?-mix:a)|(?-mix:b)|(?-mix:c)/ 
+0

如何使用正则表达式的数组? – London

+1

@伦敦,我更新了答案。见第二个代码。 – falsetru

+0

非常感谢! – London