J'ai besoin de remplacer la valeur d'une chaîne dans mon expression régulière dans Ruby. Y a-t-il un moyen facile de faire ceci? Par exemple:
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
Réponses:
Identique à l'insertion de chaîne.
la source
Notez que la
Regexp.quote
dans la réponse de Jon L. est important!Si vous ne faites que la version "évidente":
alors les points de votre texte de correspondance sont traités comme des jokers d'expression régulière et
"0.0.0.0"
correspondent"0a0b0c0"
.Notez également que si vous voulez vraiment simplement vérifier une correspondance de sous-chaîne, vous pouvez simplement faire
qui ne nécessite pas de guillemets supplémentaires ni de souci des caractères spéciaux.
la source
.quote()
) peut également être utile si vous cherchez à construire une expression régulière en utilisant une chaîne.if goo.include?(foo)
" => True lorsque vous souhaitez vérifier l'existence. Si vous souhaitez remplacer et utiliser déjà String.gsub, Regexp.quote peut être votre seule option.Regexp.new
ouRegexp.compile
.Probablement
Regexp.escape(foo)
serait un point de départ, mais est - il une bonne raison pour laquelle vous ne pouvez pas utiliser plus classique expression d'interpolation:"my stuff #{mysubstitutionvariable}"
?En outre, vous pouvez simplement utiliser
!goo.match(foo).nil?
avec une chaîne littérale.la source
la source
Utilisez Regexp.new:
la source
Voici une autre réponse limitée mais utile:
J'ai découvert que je peux facilement insérer dans une regex sans utiliser Regexp.quote ou Regexp.escape si je viens d'utiliser des guillemets simples sur ma chaîne d'entrée: (une adresse IP correspond)
les guillemets simples n'interprètent que \\ et \ '.
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
Cela m'a aidé lorsque j'ai eu besoin d'utiliser la même portion longue d'une expression régulière plusieurs fois. Pas universel, mais correspond à l'exemple de la question, je crois.
la source
la source