Muszę przekonwertować ciąg, taki jak „/ [\ w \ s] + /”, na wyrażenie regularne.
"/[\w\s]+/" => /[\w\s]+/
Próbowałem użyć różnych Regexp
metod, takich jak:
Regexp.new("/[\w\s]+/") => /\/[w ]+\//
, podobnie Regexp.compile
i Regexp.escape
. Ale żaden z nich nie wraca tak, jak się spodziewałem.
Co więcej, próbowałem usunąć ukośniki odwrotne:
Regexp.new("[\w\s]+") => /[w ]+/
Ale nie mam szczęścia.
Potem spróbowałem zrobić to prosto:
str = "[\w\s]+"
=> "[w ]+"
To ucieka. W jaki sposób łańcuch znaków mógłby pozostać niezmieniony i przekształcić go w obiekt wyrażenia regularnego?
ruby
regex
string
ruby-1.9.3
cmthakur
źródło
źródło
/#{your_regex}/#{options}
.options
to hash, a Ruby nie jest baaaaardzo dynamiczna =)Ta metoda bezpiecznie usunie wszystkie znaki o specjalnym znaczeniu:
Na przykład
.
zostanie zmieniony znak ucieczki, ponieważ w przeciwnym razie jest interpretowany jako „dowolny znak”.Pamiętaj, aby użyć pojedynczego cudzysłowu, chyba że chcesz włączyć zwykłą interpolację ciągów, gdzie ukośnik odwrotny ma specjalne znaczenie.
źródło
+.
), które byłyby zinterpretowane w wyrażeniu regularnym."\n"
Jest znakiem nowej linii, ale nim'\n'
nie jest.Używanie notacji%:
lub
Z pomocy :
źródło
Klejnot to_regexp może wykonać pracę.
Możesz także użyć modyfikatora:
źródło