• Publicidad

Expresión regular de matching

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Notapor noballack » 2006-11-03 09:21 @431

¡¡¡¡¡Muchas gracias tíos, sois los putos amos!!!!!

¡Yo me estuve rompiendo la cabeza durante horas!

¡¡Gracias por todo. Hasta la próxima!!
noballack
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2006-11-02 10:09 @464

Publicidad

Notapor noballack » 2006-11-08 06:32 @314

¡¡¡¡Hola buenas!!!!
Voy a reabrir el hilo con un nuevo reto.


La expresión regular de ikegami funciona bien siempre que enviemos a comparar un link detrás de otro, pero si lo que hacemos es enviar un texto con un conjunto de links la expresión no funciona correctamente.

Aquí tenéis el trozo de código que funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $links = qq{
<a href="/story/43480/">The Bottled Water Lie</a>
<a href="/story/video/43480/">The Bottled Water Lie</a>
<a href="/story/43967/">Test</a>
};

while ( $links =~ /href="([^\"]+)">([^\>]+)<\/a>/isg) {
my ($url, $title) = ($1, $2);

print("$url: $title\n");
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Si utilizamos este código, el programa nos mostrará la url y el texto de cada link. En tres líneas.

Lo que yo necesito es una expresión regular que haga lo mimo pero que en el caso de que aparezca la palabra video en el href no muestre el link.

El código original no puede modificarse. Sólo la expresión regular.



También os pongo el mismo trozo pero con la expresión de ikegami para que veáis que no funciona como yo lo necesito.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $links = qq{
<a href="/story/43480/">The Bottled Water Lie</a>
<a href="/story/video/43480/">The Bottled Water Lie</a>
<a href="/story/43967/">Test</a>
};

while ( $links =~ /href="((?:(?!video).)+)">(.+)<\/a>/isg) {
my ($url, $title) = ($1, $2);

print("$url: $title\n");
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Muchas gracias a todos
noballack
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2006-11-02 10:09 @464

Notapor kidd » 2006-11-08 10:23 @474

Hola:

Te falta poner un non-gready:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $links = qq{
<a href="/story/43480/">The Bottled Water Lie</a>
<a href="/story/video/43480/">The Bottled Water Lie</a>
<a href="/story/43967/">Test</a>
};


while ( $links =~ /href="((?:(?!video).)+)">(.*?)<\/a>/isg) {

    my ($url, $title) = ($1, $2);
    print("$url: $title\n");

}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor noballack » 2006-11-14 03:27 @185

Hola chicos, perdón por la tardanza pero he estado muy liado, la solución que me propones tampoco funciona siempre. Sólo funciona en el caso que las url con y sin la palabra video esten intercaladas una i una no. En el caso de tener lo siguiente no funciona:

Código: Seleccionar todo
my $links = qq{
<a href="/story/43480/">The Bottled Water Lie</a>
<a href="/story/video/43480/">The Bottled Water Lie</a>
<a href="/story/43967/">Test</a>
<a href="/story/43483/">Lie Water Bottled</a>
<a href="/story/43488/">Water Lie</a>
};


Podrías revisar la expresión? Yo lo he iententado pero no he llegado a ninguna solución que me sirva.

Muchas gracias.[/code]
noballack
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2006-11-02 10:09 @464

Notapor kidd » 2006-11-14 13:29 @603

Hola:

Faltaba otro non-greedy:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $links = qq{
<a href="/story/43480/">The Bottled Water Lie</a>
<a href="/story/video/43480/">The Bottled Water Lie</a>
<a href="/story/43967/">Test</a>
<a href="/story/43483/">Lie Water Bottled</a>
<a href="/story/43488/">Water Lie</a>
};


while ( $links =~ /href="((?:(?!video).)+?)">(.*?)<\/a>/isg) {

    my ($url, $title) = ($1, $2);
    print("$url: $title\n");

}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Resultado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
/story/43480/: The Bottled Water Lie
/story/43967/: Test
/story/43483/: Lie Water Bottled
/story/43488/: Water Lie
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4



Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Anterior

Volver a Avanzado

¿Quién está conectado?

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

cron