Je dois convertir une chaîne comme “/ [\ w \ s] + /” en expression régulière.
"/[\w\s]+/" => /[\w\s]+/
J’ai essayé d’utiliser différentes méthodes Regexp
comme:
Regexp.new("/[\w\s]+/") => /\/[w ]+\//
, de même Regexp.comstack
et Regexp.escape
. Mais aucun ne revient comme je l’espérais.
De plus, j’ai essayé de supprimer les barres obliques inverses:
Regexp.new("[\w\s]+") => /[w ]+/
Mais pas de chance.
Ensuite, j’ai essayé de le faire simplement:
str = "[\w\s]+" => "[w ]+"
Il s’échappe Maintenant, comment la chaîne peut-elle restr telle quelle et convertir en object regexp?
On dirait que la chaîne initiale doit être entre guillemets simples (reportez – vous à cette page )
>> str = '[\w\s]+' => "[\\w\\s]+" >> Regexp.new str => /[\w\s]+/
Pour être clair
/#{Regexp.quote(your_ssortingng_variable)}/
travaille aussi
edit: enveloppé votre_variable_ssortingng dans Regexp.quote, pour plus de précision.
Cette méthode échappe en toute sécurité à tous les caractères ayant une signification particulière:
/#{Regexp.quote(your_ssortingng)}/
Par exemple .
sera échappé, car il est autrement interprété comme «n’importe quel personnage».
N’oubliez pas d’utiliser une chaîne de guillemets simples à moins que vous ne souhaitiez que l’interpolation de chaîne soit active, où la barre oblique inverse a une signification particulière.
En utilisant la notation%:
%r{\w+}m => /\w+/m
ou
regex_ssortingng = '\W+' %r[#{regex_ssortingng}]
De l’ aide :
% r [] Expression interpolée (les indicateurs peuvent apparaître après le délimiteur de fermeture)
Le bijou to_regexp peut faire le travail.
"/[\w\s]+/".to_regexp => /[\w\s]+/
Vous pouvez également utiliser le modificateur:
'/foo/i'.to_regexp => /foo/i
Enfin, vous pouvez être plus paresseux en utilisant: detect
'foo'.to_regexp(detect: true) #=> /foo/ 'foo\b'.to_regexp(detect: true) #=> %r{foo\\b} '/foo\b/'.to_regexp(detect: true) #=> %r{foo\b} 'foo\b/'.to_regexp(detect: true) #=> %r{foo\\b/}