我没有得到这种ruby语法

时间:2014-06-21 01:09:57

标签: ruby

红宝石中的=〜意味着什么?这是我的代码:

    File.open("Safeway.html") do |f|
      f.each do |line|
        puts line if line =~ /"\/recipe\//
      end
    end

3 个答案:

答案 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对象提供的所有信息:

http://www.ruby-doc.org/core-2.1.2/MatchData.html