3

我有多个正则表达式,我想使用 Regexp.union 将它们组合成一个大的正则表达式,所以我有这个正则表达式作为示例:

^image\d*$

所以我试试这个:

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

它逃脱了我的正则表达式,/\^image\\d\*\$/所以当我尝试基本情况时它不匹配:

"image0".match(re)
 => nil 

我怎样才能解决这个问题?

4

1 回答 1

7

传递Regexp对象。%w(...)是字符串文字。将%r(...)or/.../用于正则表达式文字。

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)/
于 2013-10-26T18:04:31.507 回答