2013-10-26 58 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