Рубиновые регулярные выражения - PullRequest
3 голосов
/ 12 сентября 2009

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 12 сентября 2009

Вы ищете 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> 
3 голосов
/ 12 сентября 2009

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

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

Выходы:

regex
ex

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

1 голос
/ 18 сентября 2009

Я предпочитаю несколько ярлыков, таких как:

email = "Khaled Al Habache <khellls@gmail.com>"
email[/<(.*?)>/, 1] # => "khellls@gmail.com"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...