从一组正则表达式中查找正则表达式匹配

时间:2011-04-16 19:02:19

标签: ruby-on-rails ruby

def match_line regex
    @line.match(regex) if !regex.is_a?(Array)
    regex.each {|rgx| 
        results = @line.match(rgx) 
        return results if !results.nil? 
    }
    return nil
end

这看起来像是可以用一行惯用的方式完成的,我只是没有看到如何。

4 个答案:

答案 0 :(得分:5)

[*regex].map{ |re| @line.match re }.compact.first

Array(regex).map{ |re| @line.match re }.compact.first

答案 1 :(得分:1)

 [*regex].find{|r| @line.match(r)}
 return $~ #will return the last MatchedData returned, otherwise nil.

$~将返回最后返回的MatchedData,否则为nil。

答案 2 :(得分:0)

def match_line regex
  [*regex].each { |r| return r if (r = @line.match r) }
end

答案 3 :(得分:0)

在这种情况下传递参数就像

一样,这是一种首选的惯例
match_line(regex1, regex2, ...)

match_line(*array_of_regexes)

而不是

match_line([regex1, regex2, ...])

match_lines(array_of_regexes)

所以你对阵列的调整是不必要的。

def match_line *regex
  regex.detect{|r| @line =~ r}
  Regexp.last_match
end