两个表达式:
puts "String has vowels" if "This is a test".match(/[aeiou]/)
和
puts "String has vowels" if "This is a test" =~ /[aeiou]/
看起来很相似。他们不是吗?我在下面做了一些测试:
"This is a test" =~ /[aeiou]/
# => 2
"This is a test".match(/[aeiou]/)
# => MatchData "i"
所以似乎=~
为您提供了第一个匹配的位置,match
方法为您提供了匹配的第一个字符。它是否正确?他们都返回true
,那么这里的区别是什么?
答案 0 :(得分:2)
如果匹配,他们只会区别 。如果没有匹配,则返回nil
。
~=
返回匹配开始的字符串中字符的数字索引
.match
返回类MatchData
答案 1 :(得分:1)
你是对的。
扩展Nobita的答案,match
效率较低,如果你只想检查字符串是否与正则表达式匹配(就像你的情况一样)。在这种情况下,您应该使用=~
。请参阅"Fastest way to check if a string matches or not a regexp in ruby?"的答案,其中包含以下基准:
require 'benchmark'
"test123" =~ /1/
=> 4
Benchmark.measure{ 1000000.times { "test123" =~ /1/ } }
=> 0.610000 0.000000 0.610000 ( 0.578133)
...
irb(main):019:0> "test123".match(/1/)
=> #<MatchData "1">
Benchmark.measure{ 1000000.times { "test123".match(/1/) } }
=> 1.703000 0.000000 1.703000 ( 1.578146)
因此,在这种情况下,=~
比match