J'ai besoin de convertir une chaîne comme "/ [\ w \ s] + /" en expression régulière.
"/[\w\s]+/" => /[\w\s]+/
J'ai essayé d'utiliser différentes Regexp
méthodes comme:
Regexp.new("/[\w\s]+/") => /\/[w ]+\//
, de même Regexp.compile
et Regexp.escape
. Mais aucun d'entre eux ne revient comme je m'y attendais.
De plus, j'ai essayé de supprimer les contre-obliques:
Regexp.new("[\w\s]+") => /[w ]+/
Mais pas de chance.
Ensuite, j'ai essayé de faire simple:
str = "[\w\s]+"
=> "[w ]+"
Il s'échappe. Maintenant, comment la chaîne pourrait-elle rester telle quelle et se convertir en un objet d'expression régulière?
la source
/#{your_regex}/#{options}
.options
est un Hash, et Ruby n'est pas tellement dynamique =)Cette méthode échappera en toute sécurité à tous les caractères ayant une signification particulière:
Par exemple,
.
sera échappé, car autrement interprété comme «n'importe quel caractère».N'oubliez pas d'utiliser une chaîne entre guillemets, sauf si vous souhaitez que l'interpolation de chaîne régulière se déclenche, où la barre oblique inverse a une signification particulière.
la source
+.
) qui seraient interprétés dans l'expression rationnelle."\n"
est une nouvelle ligne mais'\n'
ne l'est pas.Utilisation de la notation%:
ou
De l' aide :
la source
Le gem to_regexp peut faire le travail.
Vous pouvez également utiliser le modificateur:
la source