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,
yx
tambié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$)