使用正则表达式扫描字符串并返回精确值

时间:2015-03-11 15:22:01

标签: ruby regex

以下显示了返回字符串中所有元音的基本方法。

x = "I love Ruby".scan(/[aeiou]/)

如果我将匹配的关键字分配给变量,我是否能够完成上面显示的相同结果?我尝试了这个,但似乎不起作用:

y = %w[bus car truck]
"I drive a bus most times but I have a truck".scan(/[#{y}]/) { |z| puts z }

我想匹配并仅返回确切的值。

2 个答案:

答案 0 :(得分:4)

Regexp::union应该有效:

Regexp.union(y)
#=> /bus|car|truck/

"I drive a bus most times but I have a truck".scan(Regexp.union(y))
#=> ["bus", "truck"]

正则表达式不尊重单词边界。这可能是也可能不是。

答案 1 :(得分:1)

y = Regexp.new %w[bus car truck].join ?|
#=> /bus|car|truck/

"I drive a bus most times but I have a truck".scan y
#=> ["bus", "truck"]