2009-09-12 3 views
3

Я понимаю, как проверить шаблон в строке с регулярным выражением в рубине. Я запутался в том, как сохранить шаблон, найденный в строке, в виде отдельной строки.Регулярные выражения Ruby

Я думал, что я мог бы сказать что-то вроде:

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

и тогда я мог бы быть в моей жизни. Однако это не работает так, как ожидалось, и возвращает всю исходную строку. Любой совет?

ответ

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> 

Но и для работы с тем, что вы только что соответствует в состоянии, если вы можете использовать $&$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> 
+0

работ, оценить его – Atreides

3

Вы также можете использовать специальные переменные $ & и $ 1 $ n, например:

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

Выходы:

regex 
ex 

$ ~ также содержит объект MatchData. См. Также: http://www.regular-expressions.info/ruby.html.

Смежные вопросы