Página 1 de 1

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

NotaPublicado: 2020-11-11 15:06 @671
por LeoSevilla
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.003 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.

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

NotaPublicado: 2020-11-11 16:18 @721
por explorer
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".

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

NotaPublicado: 2020-11-12 08:12 @383
por LeoSevilla
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.