regulares - ruby regex validator
¿Qué es ''?-Mix'' en una expresión regular de Ruby (2)
Sólo trato de depurar una expresión regular en ruby. Cuando ?-mix el contenido de una expresión regular, se muestra ?-mix al principio de la expresión regular a pesar de que esos caracteres no formaban parte de la expresión. Por favor, vea la siguiente salida IRB para ver esto ilustrado
irb(main):028:0* EXPR = /^a$/
=> /^a$/
irb(main):029:0> EXPR
=> /^a$/
irb(main):030:0> puts EXPR
(?-mix:^a$)
=> nil
Como puede ver, cuando usa el ?-mix puts para imprimir el contenido de una expresión regular, hay una ?-mix principio. ¿Debería preocuparme por esto? ¿De dónde viene?
En cuanto a la - es una sintaxis para las banderas. Los que están antes del guión están activados y los que están después están apagados.
Como se explica en los documentos de Regexp , este es un modificador en línea, utilizando la sintaxis (?on-off) On (?on-off) :
El delimitador final para una expresión regular puede ir seguido de una o más opciones de una sola letra que controlan cómo puede coincidir el patrón.
/pat/i- Ignorar caso/pat/m- Trata una nueva línea como un carácter que coincide./pat/x- Ignora los espacios en blanco y los comentarios en el patrón/pat/o- Realizar la interpolación#{}una sola vez
i,m,yxtambién se pueden aplicar en el nivel de subexpresión con la construcción(?on-off), que habilita las opciones activadas y deshabilita las opciones desactivadas para la expresión entre los paréntesis.
Por lo tanto, en mi caso, esto significa que las opciones m , i y x están desactivadas y ninguna está activada.
mix no es la mezcla de palabras en inglés, son opciones de Regexp .
Ver Regexp#to_s :
Devuelve una cadena que contiene la expresión regular y sus opciones (usando la notación (
?opts:source).
En su ejemplo, m es para modo multilínea , i es para no distinguir entre mayúsculas y minúsculas , y x es para modo extendido . Las opciones antes de que el guión esté activado, las posteriores están desactivadas (predeterminado) . El ejemplo de la pregunta ?-mix , tiene todas las opciones desactivadas.
Puedes encenderlos como:
puts /^a$/mix
# =>(?mix:^a$)