Expresiones regulares y fundamentos de programación
Publicado: 2006-11-07 06:17 @304
Hola, otra vez. Ahora estoy trabajando con un texto etiquetado en XML. Y estoy haciendo expresiones regulares para extraer el texto que necesito de entre dos etiquetas determinadas. Imaginaros:
Imaginaros que todo esto está en la misma línea. El problema viene cuando hago la siguiente expresión regular para extraer el texto que está entre las etiquetas:
Si pongo esto, lo que hace Perl es coger la primera etiqueta de apertura y la última de cierre.
Para aclararme, he hecho un programa superbásico de este tipo:
y el resultado es de $1 es: cereza holados hola plátano,
o sea, lo que está entre el primer hola y el último holados.
En realidad es una duda de fundamentos de programación.
Según mi lógica, lo que Perl debería hacer al encontrarse una expresión regular de este tipo es ir leyendo carácter por carácter hasta toparse con el primer holados y ahí hacer pattern matching; y después, como le he puesto la g, debería seguir buscando este mismo patrón en el resto de la línea que todavía le quedaría por leer, a ver si lo encuentra.
Pero parece que el programa no razona así; no lo entiendo, ¿alguien me lo podría explicar, por favor?
- Código: Seleccionar todo
<etiqueta>aquí hay todo tipo de caracteres</etiqueta><etiqueta>aquí lo mismo</etiqueta>
Imaginaros que todo esto está en la misma línea. El problema viene cuando hago la siguiente expresión regular para extraer el texto que está entre las etiquetas:
Using perl Syntax Highlighting
Si pongo esto, lo que hace Perl es coger la primera etiqueta de apertura y la última de cierre.
Para aclararme, he hecho un programa superbásico de este tipo:
Using perl Syntax Highlighting
$texto="hola cereza holados hola plátano holados";
$_=~ s/hola(.+)holados/$1/g;
print $dolar=$1;
$_=~ s/hola(.+)holados/$1/g;
print $dolar=$1;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y el resultado es de $1 es: cereza holados hola plátano,
o sea, lo que está entre el primer hola y el último holados.
En realidad es una duda de fundamentos de programación.
Según mi lógica, lo que Perl debería hacer al encontrarse una expresión regular de este tipo es ir leyendo carácter por carácter hasta toparse con el primer holados y ahí hacer pattern matching; y después, como le he puesto la g, debería seguir buscando este mismo patrón en el resto de la línea que todavía le quedaría por leer, a ver si lo encuentra.
Pero parece que el programa no razona así; no lo entiendo, ¿alguien me lo podría explicar, por favor?