151 votes

Interpoler une chaîne dans une expression régulière

J’ai besoin de substituer la valeur d’une chaîne dans mon expression régulière en Ruby. Y a-t-il un moyen facile de faire cela ? Par exemple :

264voto

Jonathan Lonowski Points 45253

Même que les insertions de chaîne.

120voto

glenn mcdonald Points 8933

Notez que l' Regexp.quote de Jon L. la réponse , c'est important!

if goo =~ /#{Regexp.quote(foo)}/

Si vous venez de faire le "évident" de la version:

if goo =~ /#{foo}/

puis le temps de votre match de texte sont traités comme des regexp des caractères génériques, "0.0.0.0" correspondra "0x0y0z".

Notez également que si vous avez vraiment juste pour vérifier une correspondance de sous-chaîne, vous pouvez simplement faire

if goo.include?(foo)

qui n'a pas besoin d'un surplus de citer ou de se soucier de caractères spéciaux.

6voto

JasonTrue Points 13615

Sans doute serait un point de départ, mais y a-t-il une bonne raison, vous ne pouvez pas utiliser l’expression plus classique-interpolation : ?

En outre, vous pouvez utiliser `` avec une chaîne littérale.

6voto

Markus Jarderot Points 33893
Regexp.compile(Regexp.escape(foo))

3voto

Jeremy Ruten Points 59989

Regexp.new d’utilisation :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X