Как я могу проверить регулярное выражение и получить соответствующие части в Ruby? - PullRequest
0 голосов
/ 02 июля 2010

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

a = "hello123"
case a
when /^([0-9]+)([a-z]+)$/
  # how to get matching values?
when /^([a-z]+)([0-9]+)$/
  # how to get matching values?
else
end

Это очень простой пример, и мой код немного сложнее.

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

Использование $~

a = "hello123"
case a
when /^([0-9]+)([a-z]+)$/
  print $~
when /^([a-z]+)([0-9]+)$/
  print $~
else
end

Будет печатать MatchData объект.(MatchData - это тип специальной переменной $ ~ и тип объекта, возвращаемого Regexp # match и Regexp # last_match. Он инкапсулирует все результаты сопоставления с шаблоном, к результатам, обычно доступным через специальные переменные $ &, $', $ `, $ 1, $ 2, ( подробнее о специальных переменных ) и т. Д. Matchdata также называется MatchingData.)

http://ruby -doc.org /ядро / классов / Regexp.html # M001202

2 голосов
/ 02 июля 2010
a = "hello123"
case a
when /^([0-9]+)([a-z]+)$/
  # how to get matching values?
  puts [$~, $1, $2]
when /^([a-z]+)([0-9]+)$/
  print "regex 2 matched "
  p [$1, $2]                    # => ["hello", "123"]
  p $~.to_a                     # => ["hello123", "hello", "123"]
else
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...