Вернуть первый матч регулярного выражения Ruby - PullRequest
88 голосов
/ 06 февраля 2009

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

Строка, которую я обрабатываю, длинная, и, исходя из того, как выглядит стандартный способ (match метод), она обрабатывает все, собирает каждое совпадение и возвращает объект MatchData, содержащий все совпадения.

match = string.match(/regex/)[0].to_s

Ответы [ 5 ]

123 голосов
/ 06 февраля 2009

Вы можете попробовать variableName[/regular expression/]. Это пример вывода из irb:

irb(main):003:0> names = "erik kalle johan anders erik kalle johan anders"
=> "erik kalle johan anders erik kalle johan anders"
irb(main):004:0> names[/kalle/]
=> "kalle"
51 голосов
/ 22 апреля 2014

Вы можете использовать []: (что похоже на match)

"foo+account2@gmail.com"[/\+([^@]+)/, 1] # matches what is inside ()
# => "account2"
"foo+account2@gmail.com"[/\+([^@]+)/, 0] # matches whole regexp
# => "+account2"
22 голосов
/ 06 февраля 2009

Если важно только наличие совпадения, вы можете перейти с

/regexp/ =~ "string"

В любом случае, match должен возвращать только первое попадание, тогда как scan выполняет поиск по всей строке. Поэтому, если

matchData = "string string".match(/string/)
matchData[0]    # => "string"
matchData[1]    # => nil - it's the first capture group not a second match
4 голосов
/ 02 октября 2015

Я пока не уверен, является ли эта функция удивительной или просто сумасшедшей, но ваш регулярный оператор может определять локальные переменные.

/\$(?<dollars>\d+)\.(?<cents>\d+)/ =~ "$3.67" #=> 0
dollars #=> "3"

(взято из http://ruby -doc.org / core-2.1.1 / Regexp.html ).

1 голос
/ 27 августа 2013

Регулярное выражение (регулярное выражение) - не что иное, как конечный автомат (FSM).

ФШМ пытается ответить на вопрос «Возможно это состояние или нет?»

Он продолжает пытаться сопоставить шаблон, пока не будет найдено совпадение (успех) или пока не будут исследованы все пути и не найдено совпадение (ошибка).

В случае успеха, вопрос "Это состояние возможно или нет?" ответили "да". Следовательно, дальнейшее сопоставление не требуется, и регулярное выражение возвращается.

Подробнее см. , и , .

Далее: вот интересный пример , чтобы продемонстрировать, как работает регулярное выражение. Здесь регулярное выражение используется для определения, является ли заданное число простым. Этот пример написан на perl, но его также можно написать на ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...