Ruby正则表达式

时间:2009-09-12 03:21:19

标签: ruby regex

我理解如何使用ruby中的regexp检查字符串中的模式。我感到困惑的是如何将字符串中找到的模式保存为单独的字符串。

我想我可以这么说:

if string =~ /regexp/ 
  pattern = string.grep(/regexp/)

然后我可以继续我的生活。但是,这不能按预期工作,并返回整个原始字符串。有什么建议吗?

3 个答案:

答案 0 :(得分:6)

你正在寻找红宝石中的string.match()

irb(main):003:0> a
=> "hi"
irb(main):004:0> a=~/(hi)/
=> 0
irb(main):005:0> a.match(/hi/)
=> #<MatchData:0x5b6e8>
irb(main):006:0> a.match(/hi/)[0]
=> "hi"
irb(main):007:0> a.match(/h(i)/)[1]
=> "i"
irb(main):008:0> 

但是,对于您在if条件中匹配的内容,您可以使用$& $1 .. $9$~

irb(main):009:0> if a =~ /h(i)/
irb(main):010:1> puts("%s %s %s %s"%[$&,$1,$~[0],$~[1]])
irb(main):011:1> end
hi i hi i
=> nil
irb(main):012:0> 

答案 1 :(得分:3)

您还可以使用特殊变量$&amp;和$ 1- $ n,如下:

if "regex" =~ /reg(ex)/
  puts $&
  puts $1
end

输出:

regex
ex

$〜还包含MatchData对象。另见:http://www.regular-expressions.info/ruby.html

答案 2 :(得分:1)

我更喜欢一些快捷方式:

email = "Khaled Al Habache <khellls@gmail.com>"
email[/<(.*?)>/, 1] # => "khellls@gmail.com"