strings regulares manejo expresiones ejemplo contar caracteres cadenas ruby regex string ruby-1.9.3

regulares - Convierte una cadena en expresión regular ruby



manejo de cadenas en ruby (5)

Necesito convertir cadenas como "/ [/ w / s] + /" a la expresión regular.

"/[/w/s]+/" => /[/w/s]+/

Traté de usar diferentes métodos Regexp como:

Regexp.new("/[/w/s]+/") => ///[w ]+/// , de manera similar Regexp.compile y Regexp.escape . Pero ninguno de ellos regresa como esperaba.

Además, traté de eliminar las barras invertidas:

Regexp.new("[/w/s]+") => /[w ]+/ Pero no tengo suerte.

Entonces traté de hacerlo simple:

str = "[/w/s]+" => "[w ]+"

Se escapa. Ahora, ¿cómo podría la cadena permanecer como está y convertirla en un objeto regexp?


Este método salvará con seguridad a todos los personajes con un significado especial:

/#{Regexp.quote(your_string)}/

Por ejemplo . se escapará, ya que de lo contrario se interpreta como ''cualquier personaje''.

Recuerde utilizar una cadena de una sola cita a menos que desee que la interpolación de cadena regular se active, donde la barra invertida tiene un significado especial.


La gema to_regexp puede hacer el trabajo.

"/[/w/s]+/".to_regexp => /[/w/s]+/

También puedes usar el modificador:

''/foo/i''.to_regexp => /foo/i

Finalmente, puede ser más perezoso usando: detectar

''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/}


Para ser claro

/#{Regexp.quote(your_string_variable)}/

está trabajando también

edit: wrap your_string_variable en Regexp.quote, para mayor exactitud.


Parece que aquí necesita que la cadena inicial esté entre comillas simples (consulte esta página )

>> str = ''[/w/s]+'' => "[//w//s]+" >> Regexp.new str => /[/w/s]+/


Usando la notación%

%r{/w+}m => //w+/m

o

regex_string = ''/W+'' %r[#{regex_string}]

De help :

% r [] Regexp interpolado (los indicadores pueden aparecer después del delimitador de cierre)