Estou procurando uma maneira de realizar uma correspondência de regex em uma string em Ruby e causar um curto-circuito na primeira correspondência.
A string que estou processando é longa e, pelo que parece, a maneira padrão ( match
método) processaria tudo, coletaria cada correspondência e retornaria um objeto MatchData contendo todas as correspondências.
match = string.match(/regex/)[0].to_s
capture
argumento - que permite retornar uma captura em vez da correspondência completa.Você pode usar
[]
: (que é comomatch
)fonte
Se apenas a existência de uma correspondência for importante, você pode ir com
De qualquer forma,
match
deve retornar apenas o primeiro resultado, enquantoscan
pesquisa em toda a string. Portanto sefonte
Ainda não tenho certeza se esse recurso é incrível ou totalmente louco, mas sua regex pode definir variáveis locais.
(Retirado de http://ruby-doc.org/core-2.1.1/Regexp.html ).
fonte
regex =~ string", not when
string = ~ regex`Uma Expressão Regular (regex) nada mais é que uma máquina de estado finito (FSM).
Um FSM tenta responder à pergunta "Este estado é possível ou não?"
Ele continua tentando fazer uma correspondência de padrão até que uma correspondência seja encontrada (sucesso) ou até que todos os caminhos sejam explorados e nenhuma correspondência seja encontrada (falha).
Em caso de sucesso, a pergunta "Esse estado é possível ou não?" foi respondido com um "sim". Portanto, nenhuma correspondência adicional é necessária e a regex retorna.
Veja isso e isso para saber mais sobre isso.
Além disso: aqui está um exemplo interessante para demonstrar como funciona o regex. Aqui, uma regex é usada para detectar se um determinado número é primo. Este exemplo está em perl, mas também pode ser escrito em ruby.
fonte