Preciso substituir o valor de uma string na minha expressão regular em Ruby. Existe uma maneira fácil de fazer isso? Por exemplo:
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0"
if goo =~ /value of foo here dynamically/
puts "success!"
end
Respostas:
O mesmo que inserção de string.
fonte
Note que o
Regexp.quote
em resposta de Jon L. é importante!Se você acabou de fazer a versão "óbvia":
os períodos no texto da correspondência serão tratados como curingas de expressão regular e
"0.0.0.0"
corresponderão"0a0b0c0"
.Observe também que, se você realmente deseja apenas verificar uma correspondência de substring, pode simplesmente fazer
que não requer uma citação adicional ou se preocupa com caracteres especiais.
fonte
.quote()
) também pode ser útil se você estiver procurando construir uma regex usando uma string.if goo.include?(foo)
" => True quando estiver interessado em verificar a existência. Se você estiver interessado em substituir e já usar o String.gsub, o Regexp.quote pode ser sua única opção.Regexp.new
ouRegexp.compile
.Provavelmente
Regexp.escape(foo)
seria um ponto de partida, mas há uma boa razão para você não usar a interpolação de expressão mais convencional"my stuff #{mysubstitutionvariable}"
:?Além disso, você pode apenas usar
!goo.match(foo).nil?
com uma string literal.fonte
fonte
Use Regexp.new:
fonte
Aqui está uma outra resposta limitada, mas útil:
Eu descobri que posso inserir facilmente em uma regex sem usar Regexp.quote ou Regexp.escape se eu apenas use aspas simples na minha string de entrada: (uma correspondência de endereço IP)
aspas simples interpretam apenas \\ e \ '.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Isso me ajudou quando eu precisei usar a mesma parte longa de um regex várias vezes. Não é universal, mas se encaixa no exemplo da pergunta, acredito.
fonte
fonte