Подтвердить что ты не робот

Вернуть первое совпадение регулярного выражения Ruby

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

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

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

Ответ 1

Вы можете попробовать 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"

Ответ 2

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

"[email protected]"[/\+([^@]+)/, 1] # matches what is inside ()
# => "account2"
"[email protected]"[/\+([^@]+)/, 0] # matches whole regexp
# => "+account2"

Ответ 3

Если важно существование матча, вы можете пойти с

/regexp/ =~ "string"

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

matchData = "string string".match(/string/)
matchData[0]    # => "string"
matchData[1]    # => nil - it the first capture group not a second match

Ответ 4

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

FSM пытается ответить на вопрос "Возможно ли это состояние или нет?"

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

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

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

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

Ответ 5

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

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

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