如何使用Regexp.union指定Regexp选项

时间:2012-10-02 18:57:41

标签: ruby regex syntax

在“How do I removing URLs from text?”中,建议使用以下代码:

require 'uri'
#...
schemes_regex = /^(?:#{ URI.scheme_list.keys.join('|') })/i
#...

我试图将其改进为:

schemes_regex = Regexp.union(URI.scheme_list.keys)

但我无法弄清楚应该如何指定IGNORECASE选项(i)。

3 个答案:

答案 0 :(得分:4)

我不相信可以将选项参数传递给Regexp.union。你当然可以在联合操作后指定它们:

require 'uri'

Regexp.new(Regexp.union(URI.scheme_list.keys).source, Regexp::IGNORECASE)
# => /FTP|HTTP|HTTPS|LDAP|LDAPS|MAILTO/i

答案 1 :(得分:3)

schemes_regex = Regexp.union(
  *URI.scheme_list.keys
  .map{|s| Regexp.new(s, Regexp::IGNORECASE)}
)

答案 2 :(得分:2)

与sawa的回应相同,但它正在寻找方案在字符串的开头:

Regexp.union(*URI.scheme_list.keys.map {|s| /\A#{s}/i })

请参阅live demo here