2010-09-21 18 views
43

¡Esta podría no ser la pregunta que esperaba! No quiero una expresión regular que coincida con los saltos de línea; en su lugar, quiero escribir una expresión regular larga que, para facilitar la lectura, me gustaría dividirla en varias líneas de código.Dividir expresiones regulares de Ruby en varias líneas

Algo así como:

"bar" =~ /(foo| 
      bar)/ # Doesn't work! 
# => nil. Would like => 0 

¿Se puede hacer?

Respuesta

37

Necesita usar el modificador /x, que habilita free-spacing mode.

+24

Esta respuesta podría mejorarse mediante la sustitución del enlace con una explicación más detallada. – mkataja

2

que puede utilizar:

"bar" =~ /(?x)foo| 
     bar/ 
+6

Esta respuesta fue útil para mi situación, pero solo después de buscar lo que (? X) significaba y pude agregar más contexto. Sería bueno si esta respuesta se actualizó para ser más explícito sobre lo que está ilustrando. Para otros interesados, encontré las notas sobre el constructo (? On-off) útiles aquí: http://ruby-doc.org/core-1.9.3/Regexp.html#class-Regexp-label-Options –

+0

@BenParizek ¿Quizás podría agregar una breve explicación aquí como comentario? –

+0

No soy un experto en este tema pero, según tengo entendido, la mayoría de las respuestas aquí dicen diferentes versiones de la misma cosa. El problema es que las expresiones complejas son difíciles de leer. La respuesta genérica es: puede activar el modo de espacio libre para ayudar a que las expresiones regulares sean más legibles. Hay varias formas de habilitar el modo de espacio libre. 1) Puede agregar el modificador después del delimitador final '/ myregex/x', 2) puede alternar el modo de espacio libre a lo largo del camino usando la construcción (? On-off)'/myregex (? X) con espaciado libre/', 3) puede usar la sintaxis'% r {myregex} x'. –

78

Usando% r con la opción X es la forma preferida para hacer esto.

ver este ejemplo de la guía de estilo rubí github

regexp = %r{ 
    start   # some text 
    \s   # white space char 
    (group)  # first group 
    (?:alt1|alt2) # some alternation 
    end 
}x 

https://github.com/styleguide/ruby

+2

El ejemplo a seguir. Los comentarios dentro de la expresión regular hacen maravillas para la mantenibilidad. –

+3

O con/en lugar de% r, porque rubocop se queja si una expresión regular no está entre barras. También su guía de estilo que lo recomienda así: https://github.com/bbatsov/ruby-style-guide#regular-expressions – ytg

Cuestiones relacionadas