• Publicidad

Array como patrón en expresión regular [Solucionado]

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

Array como patrón en expresión regular [Solucionado]

Notapor LeoSevilla » 2020-11-11 15:06 @671

Hola, buenas a todos.

Este es el texto que procesa el script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <a class="pais" href="">USA</a></td>
  2. <td style="font-weight: bold; text-align:right;background-color:#FFEEAA;">dato USA</td>
  3. <a class="pais" href="">Spain</a></td>
  4. <td style="font-weight: bold; text-align:right;background-color:#FFEEAA;">dato Spain</td>
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pongo el código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $i = 0;    
  2. my @total = ();
  3.  
  4. @regexp = (".*pais.*>(.*?)<\/a",".*FFEEAA.*>(.*?)<\/t");
  5.  
  6. procesar ($texto, \@regexp);
  7.  
  8. sub procesar{
  9.     my ($content,$regexp) = @_;
  10.     my @lineas = split "\n" , $content;
  11.     my @reg = @{$regexp};
  12.     foreach (@lineas){
  13.         if($_ =~ m{$regexp->[$i]}o){
  14.             $total[$i] = $1;
  15.             $i++;
  16.         }
  17.         if(scalar(@reg)==$i){last;}
  18.        
  19.     }
  20.     print @total;
  21. }
  22.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


La intención es que imprima: USAdato Usa
Pero lo que imprime es: USASpain

El caso es que al encontrar la primera coincidencia, entra en el if() y recoge USA y aumenta el contador $i pero, y aunque con un depurador, me dice que el próximo patrón es el que busco, no hace caso y recoge de nuevo el primer patrón. ¿En qué me estoy equivocando?

Buenas tardes y saludos. LeoSevilla.
Última edición por LeoSevilla el 2020-11-12 08:09 @381, editado 1 vez en total
LeoSevilla
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2011-11-19 15:24 @683

Publicidad

Re: Array como patrón en expresión regular

Notapor explorer » 2020-11-11 16:18 @721

El problema está en el modificador '/o'.

Este modificador "compila" el patrón la primera vez que se ejecuta la expresión regular, por lo que sólo está probando el primer patrón de los dos que has pasado a la función.

Si lo quitas, ya sale "USAdato USA".
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Array como patrón en expresión regular[Solucionado]

Notapor LeoSevilla » 2020-11-12 08:12 @383

Muchas gracias.

Leí que para interpolar(*) una variable string, había que usar el '/o'.

Saludos.

(*) No sé si es la palabra adecuada, pero quiero decir poner un variable dentro del patrón.
LeoSevilla
Perlero nuevo
Perlero nuevo
 
Mensajes: 24
Registrado: 2011-11-19 15:24 @683


Volver a Básico

¿Quién está conectado?

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