匹配数组中的模式

Kit*_* Ho 29 ruby arrays

有一个包含2个元素的数组

test = ["i am a boy", "i am a girl"]
Run Code Online (Sandbox Code Playgroud)

我想测试是否在数组元素中找到了一个字符串,例如:

test.include("boy")  ==> true
test.include("frog") ==> false
Run Code Online (Sandbox Code Playgroud)

我能这样做吗?

gho*_*ppe 49

使用正则表达式.

test = ["i am a boy" , "i am a girl"]

test.find { |e| /boy/ =~ e }   #=> "i am a boy"
test.find { |e| /frog/ =~ e }  #=> nil
Run Code Online (Sandbox Code Playgroud)

  • @izomorphius`\b`匹配单词边界,所以:`/\bboy\b /` (5认同)
  • @izomorphius是的,但海报没有说明字符串是否必须是单独的单词.很容易用不同的正则表达式修复. (2认同)

Rog*_*ger 40

那么你可以像这样grep(正则表达式):

test.grep /boy/
Run Code Online (Sandbox Code Playgroud)

甚至更好

test.grep(/boy/).any?
Run Code Online (Sandbox Code Playgroud)

  • 反转它会更有效,即将`match`传递给`any?`,所以它不必检查所有字符串. (5认同)

Ric*_*uck 6

你也可以做

test = ["i am a boy" , "i am a girl"]
msg = 'boy'
test.select{|x| x.match(msg) }.length > 0
=> true
msg = 'frog'
test.select{|x| x.match(msg) }.length > 0
=> false
Run Code Online (Sandbox Code Playgroud)