Я ищу способ выполнить сопоставление регулярного выражения для строки в Ruby и закоротить его при первом совпадении.
Строка, которую я обрабатываю, длинная и, match
судя по всему, стандартный способ ( метод) обрабатывает все это целиком, собирает каждое совпадение и возвращает объект MatchData, содержащий все совпадения.
match = string.match(/regex/)[0].to_s
capture
аргумент, который позволяет вам вернуть захват вместо полного совпадения.Вы можете использовать
[]
: (что похожеmatch
)источник
Если важно только наличие совпадения, вы можете пойти с
В любом случае
match
должен возвращать только первое попадание, аscan
поиск выполняется по всей строке. Поэтому еслиисточник
Я еще не уверен, хороша ли эта функция или просто сумасшедшая, но ваше регулярное выражение может определять локальные переменные.
(Взято с http://ruby-doc.org/core-2.1.1/Regexp.html ).
источник
regex =~ string", not when
string = ~ regex`Регулярное выражение (regex) - это не что иное, как конечный автомат (FSM).
Автомат пытается ответить на вопрос «Возможно ли это состояние или нет?»
Он продолжает попытки найти совпадение с шаблоном до тех пор, пока совпадение не будет найдено (успех), или пока все пути не будут исследованы и совпадение не будет найдено (сбой).
В случае успеха, вопрос «Возможно ли это состояние или нет?» был дан ответ "да". Следовательно, дальнейшее сопоставление не требуется, и регулярное выражение возвращается.
См. This и this, чтобы узнать больше об этом.
Далее: вот интересный пример, демонстрирующий, как работает регулярное выражение. Здесь регулярное выражение используется для определения того, является ли данное число простым. Этот пример написан на Perl, но его также можно написать на Ruby.
источник