• Publicidad

Algunas dudas con 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.

Algunas dudas con expresiones regulares

Notapor erv-Z » 2010-03-20 13:47 @616

Bueno, tengo dos duda sobre Expresiones Regulares, la primera es que necesito un buen concepto sobre esta función, sé cómo más o menos funciona pero sin un concepto concreto no lo domino mucho xD.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
(?:....)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[^"]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Publicidad

Re: Algunas dudas con expresiones regulares

Notapor explorer » 2010-03-20 16:15 @719

(?:....) sirve para indicar que esos paréntesis no son paréntesis de captura. Eso quiere decir que el patrón de caracteres coincidentes con la expresión regular que exista dentro de esos paréntesis no va a formar parte de las variables especiales $1, $2, $3, etc.

Se suele usar para agrupar opciones, pero sin capturar. Ejemplo:

/(gat(?:o|a))/

Con esta expresión regular capturamos 'gato' o 'gata' en $1, pero la 'o' o la 'a' final no son capturadas en $2.

[^"] representa cualquier carácter que NO sea '"'.
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: Algunas dudas con expresiones regulares

Notapor erv-Z » 2010-03-20 16:51 @743

Um...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. $a = 'hola';
  4. if($a =~ m/(\w+(?:\d))/){print $1, "\n";}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

No captura nada, me debería capturar por lo menos el primero.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583

Re: Algunas dudas con expresiones regulares

Notapor explorer » 2010-03-20 18:11 @799

No, no captura nada porque el texto no coincide con la expresión regular.

El texto es un conjunto de letras ('hola'). Y tu estás indicando en la expresión regular que estás esperando un conjunto de letras alfanuméricas (\w+) seguidas de un dígito, que no vas a capturar ((?:\d)). Y como en el texto no hay un dígito, pues por eso falla.

Cuando se dice que no se va a capturar, no es lo mismo que decir que queremos que su presencia sea opcional.

Si lo que querías es decir que el dígito puede estar o no, debes hacerlo con un '?' a continuación:

m/(\w+(?:\d?))/

De esta manera, capturamos todas las palabras que terminen, o no, con un dígito. Y lo que se devuelve en $1 es esa palabra incluido el dígito (los paréntesis de captura rodean a toda la expresión regular).

Si solo quieres detectar patrones de cadenas de caracteres, posiblemente seguidos de un dígito, y solo capturar hasta el último dígito, sería algo así:

m/([a-z]+)\d?/

El indicador '\w' representa a caracteres alfanuméricos, así que eso también incluye a los dígitos. Si usáramos '\w' nos devolverá también a los dígitos, en cualquier caso. Usando '[a-z]' reducimos la búsqueda a solamente los alfabéticos.
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: Algunas dudas con expresiones regulares

Notapor erv-Z » 2010-03-21 08:33 @398

Ya entendí, grax.
erv-Z
Perlero nuevo
Perlero nuevo
 
Mensajes: 158
Registrado: 2009-07-25 13:00 @583


Volver a Básico

¿Quién está conectado?

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