红宝石中的=〜意味着什么?这是我的代码:
File.open("Safeway.html") do |f|
f.each do |line|
puts line if line =~ /"\/recipe\//
end
end
答案 0 :(得分:1)
=~
是正则表达式匹配的运算符。它需要它的操作数(一个是一个字符串,另一个是正则表达式),并且返回nil表示没有匹配或匹配的匹配索引索引。
答案 1 :(得分:1)
基本上,它意味着"匹配"。在这种情况下,它是String
上的一种方法,因此您可以通过查看docs for String#=~
来清楚地看到它的含义:
匹配 - 如果obj是Regexp,则将其用作匹配str的模式,并返回匹配开始的位置,如果没有匹配则返回nil。否则,调用obj。=〜,将str作为参数传递。 Object中的default =〜返回nil。
注意:str = ~regexp与regexp = ~str不同。从命名捕获组捕获的字符串仅在第二种情况下分配给局部变量。
"cat o' 9 tails" =~ /\d/ #=> 7 "cat o' 9 tails" =~ 9 #=> nil
答案 2 :(得分:0)
Ruby从perl那里得到了一些东西。在perl中,正则表达式匹配是使用=〜运算符完成的。有些人认为你应该编写永远不会被误认为perl的代码,在这种情况下你可以使用Regexp #matse()或String #matse()。如果使用String#match(),例如:
'hello'.match('.')
Ruby只是将参数(即'。')转换为Regexp,然后在Regexp上调用Regexp #matse()。
我更喜欢写:
md = my_str.match /my_regex/
然后测试MatchData对象以查看是否匹配:
md = my_str.match /my_regex/
if md #do something
puts md[0] #the whole match
...
如果没有匹配,则md设置为nil。检查MatchData类以获取MatchData对象提供的所有信息: