Página 1 de 1

Compactar una expresión regular

NotaPublicado: 2013-04-12 14:59 @665
por Dshellnoi_Unix
Quiero extraer exactamente la ruta absoluta junto con el directorio wp-content con una posible profundidad de 12 directorios... ¿Habría alguna manera de compactar esta expresión que me funciona pero es un poco larga?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open(WP, "/tmp/salida.txt");
  2.  
  3. while (my $p = <WP>) {
  4.  
  5.     while ($p =~ m#((/\w*|/\w*/\w*|/\w*/\w*/\w*|/\w*/\w*/\w*/\w*|/\w*/\w*/\w*/\w*/\w*|/\w*/\w*/\w*/\w*/\w*/\w*)?/wp-content/)#g) {
  6.         my $dir = $1;
  7.    
  8.         $directorios{ $dir } = 1;
  9.     }
  10. }
  11.  
  12. close(WP);
  13.  
  14. my @directorios = keys %directorios;
  15.  
  16. for  my $dir (@directorios) {
  17.     print  $dir ."\n";
  18. }
  19.  
  20.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Gracias de antemano =^.^=

Re: Compactar una expresión regular

NotaPublicado: 2013-04-12 16:12 @717
por explorer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     while ($p =~ m#((?:/\w+){0,12}/wp-content/?)#g) {
  2.         $directorios{ $1 } = 1;
  3.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Compactar una expresión regular

NotaPublicado: 2013-04-12 16:42 @738
por Dshellnoi_Unix
Gracias, explorer. Perdona mi ignorancia, pero, ¿qué hacen los dos puntos, exactamente? Es que no están en los tutoriales de expresiones regulares que están en la página ni en los que tengo aquí. Lo haces tan bonito que parece fácil. ¡ja,ja,ja,ja!

Re: Compactar una expresión regular

NotaPublicado: 2013-04-12 16:57 @748
por explorer
El (?:...) es uno de los patrones extendidos de Perl (busca por (?:patrón)).

Lo que hace es decir que esos paréntesis no son de captura, sino solo de agrupación. No capturan la coincidencia con el patrón y la guardan en $1, $2, $3, etc., sino que los necesitamos para englobar la expresión junto con el cuantificador con las llaves que le sigue.

Tampoco pasaría nada si se quitara '?:' y fueran unos paréntesis normales (al menos, en esta expresión regular; en otra, sí que serían necesarios).

Re: Compactar una expresión regular

NotaPublicado: 2013-04-13 02:46 @157
por Dshellnoi_Unix
Muchas gracias por tu paciencia.
Que tengas un buen finde :)