• Publicidad

Duda de modificadores en expresiones regulares

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Duda de modificadores en expresiones regulares

Notapor Pablo3728 » 2010-05-01 15:09 @673

Buenas, tengo una consulta respecto a los modificadores.
Quiero saber si los conceptos que tengo son los correctos:

/s single line, permite que el . reconozca el /n y trata todo como una sola línea. A la primera ocurrencia que encuentra, frena.

/m busca en todas las líneas, pasando por arriba los /n y a la primera ocurrencia que encuentra, frena.

/g ¿busca globalmente en una variable? ¿o en toda la entrada? y no frena con la primera ocurrencia

Si alguien pudiera aclararnos los conceptos, estaría buenísimo.

Desde ya ¡muchas gracias! ¡Saludos! :D
Pablo3728
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2010-03-26 08:33 @398

Publicidad

Re: Duda de modificadores en expresiones regulares

Notapor explorer » 2010-05-01 15:24 @683

Desde perlre:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
* m   Trata a la cadena como múltiples líneas. Es decir, cambia "^" y "$" de coincidir con el principio y final de cadena para coincidir con el principio y final de cualquier línea dentro de la cadena.

* s   Trata la cadena como una sola línea. Es decir, cambia "." para que coteje con cualquier carácter, incluso el fin de línea, que normalmente no lo haría.

Usados juntos, como /ms, hacen que "." coincida con cualquier carácter, mientras que "^" y "$" coincidan, respectivamente, con justo después y justo antes de los caracteres nueva línea, dentro de la cadena.

* i   Hace cotejamientos independientes del tamaño de caja.

Si "use locale" está activo, el tamaño de caja se toma del locale actual. Ver perllocale.

* x   Extiende la legibilidad de su patrón permitiendo espacios en blanco y comentarios.

* p   Preserva la cadena cotejada en ${^PREMATCH}, ${^MATCH}, y ${^POSTMATCH}, estando disponibles para ser usados después del cotejo.

* g y c  Coincidencia global, y mantenimiento de la posición actual después de un cotejamiento fallido. A diferencia de i, m, s y x, estas dos opciones afectan la forma en que la regex es usada, en lugar de a la propio expresión regular. Ver "Usando expresiones regulares en Perl" en perlretut para una mayor explicación de los modificadores g y c.
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Duda de modificadores en expresiones regulares

Notapor explorer » 2010-05-01 15:43 @696

En "Perl Best Practices", se indica que, para los novatos, es difícil entender las diferencias entre /m y /s, e incluso /sm. Por eso, recomienda que en TODAS las expresiones regulares (salvo caso especial), se use siempre los siguientes modificadores: /smx, que tiene el efecto de:

* s: Trata a toda la cadena como una sola línea, así que "." busca también los finales de línea, algo que debería ser siempre así

* m: "^" y "$" siguen anclando en límites de línea, algo que es normal si sabemos que dentro de la cadena hay varias líneas. Para buscar el inicio y fin de toda la cadena, usar \A y \z, en su lugar.

* x: nos permite escribir exp. reg. más legibles.


Por otra parte, g es para buscar todas las ocurrencias del patrón dentro de la cadena.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados