validator regulares expresiones examples ruby regex

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, y x 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$)