• Publicidad

Expresiones regulares para validar dos líneas

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Expresiones regulares para validar dos líneas

Notapor Quique3008 » 2011-02-17 01:57 @123

Hola, comunidad. Hoy me he encontrado con un problema... He investigado pero no he dado con la solución :? Bien, explicaré mi problema.

Este es mi texto inicial:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
TOC of the extracted CD
Track | Start | Length | Start sector | End sector
---------------------------------------------------------
1 | 00:00:00 | 05:37:20 | 0 | 25294
2 | 05:37:20 | 07:53:72 | 25295 | 60841
3 | 13:31:17 | 04:43:28 | 60842 | 82094
4 | 18:14:45 | 08:28:67 | 82095 | 120261
5 | 26:43:37 | 04:35:58 | 120262 | 140944
6 | 31:19:20 | 06:19:55 | 140945 | 169424
7 | 37:39:00 | 05:30:42 | 169425 | 194216
8 | 43:09:42 | 05:24:20 | 194217 | 218536
9 | 48:33:62 | 05:29:20 | 218537 | 243231
10 | 54:03:07 | 05:30:48 | 243232 | 268029
11 | 59:33:55 | 05:51:22 | 268030 | 294376

All Tracks
Filename : /Pat Metheny - Trio 99->00/Trio 99 -> 00.flac
Album gain : -2.37 dB
Peak : 0.998932
CRC32 hash (test run) : 66461ED4
CRC32 hash : 66461ED4
CRC32 hash (skip zero) : A78CD3A0
Statistics
Read error : 0
Skipped (treated as error) : 0
Edge jitter error (maybe fixed) : 0
Atom jitter error (maybe fixed) : 0
Drift error (maybe fixed) : 0
Dropped bytes error (maybe fixed) : 0
Duplicated bytes error (maybe fixed) : 0
Inconsistency in error sectors : 0
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Entonces he intentado hacer una expresión regular que, si está este pedazo de texto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
All Tracks
Filename : /Pat Metheny - Trio 99->00/Trio 99 -> 00.flac
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

si encuentra All Tracks y luego la cadena Filename, me dé algún mensaje...

He intentado con este código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($line2 =~ m/^All Tracks([\x00-\x7F]*?)Filename(.*)/)
  2.     {
  3.  
  4. say "COSA";
  5.  
  6.  
  7. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El "([\x00-\x7F]*?)" es equivalente a "\n"... pero aun así no hace lo que busco.

Entonces me pregunto... ¿cómo hago para validar dos líneas?

PD. Todo ese archivo de texto, se lee y se guarda en un array mediante <> STDIN.
Quique3008
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2011-01-26 15:03 @669

Publicidad

Re: Expresiones regulares para validar dos líneas

Notapor explorer » 2011-02-17 04:53 @245

Dices que el fichero lo lees a un array, pero primero lo has planteado como un escalar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. my $fichero = do { undef $/; <DATA> };
  4.  
  5. if ($fichero =~ m/All Tracks\s+Filename : (.*)/) {
  6.     print "$1\n";
  7. }
  8.  
  9. __DATA__
  10. TOC of the extracted CD
  11. Track | Start | Length | Start sector | End sector
  12. ---------------------------------------------------------
  13. 1 | 00:00:00 | 05:37:20 | 0 | 25294
  14. 2 | 05:37:20 | 07:53:72 | 25295 | 60841
  15. 3 | 13:31:17 | 04:43:28 | 60842 | 82094
  16. 4 | 18:14:45 | 08:28:67 | 82095 | 120261
  17. 5 | 26:43:37 | 04:35:58 | 120262 | 140944
  18. 6 | 31:19:20 | 06:19:55 | 140945 | 169424
  19. 7 | 37:39:00 | 05:30:42 | 169425 | 194216
  20. 8 | 43:09:42 | 05:24:20 | 194217 | 218536
  21. 9 | 48:33:62 | 05:29:20 | 218537 | 243231
  22. 10 | 54:03:07 | 05:30:48 | 243232 | 268029
  23. 11 | 59:33:55 | 05:51:22 | 268030 | 294376
  24.  
  25. All Tracks
  26. Filename : /Pat Metheny - Trio 99->00/Trio 99 -> 00.flac
  27. Album gain : -2.37 dB
  28. Peak : 0.998932
  29. CRC32 hash (test run) : 66461ED4
  30. CRC32 hash : 66461ED4
  31. CRC32 hash (skip zero) : A78CD3A0
  32. Statistics
  33. Read error : 0
  34. Skipped (treated as error) : 0
  35. Edge jitter error (maybe fixed) : 0
  36. Atom jitter error (maybe fixed) : 0
  37. Drift error (maybe fixed) : 0
  38. Dropped bytes error (maybe fixed) : 0
  39. Duplicated bytes error (maybe fixed) : 0
  40. Inconsistency in error sectors : 0
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

El truco está en el uso de \s+, que captura los caracteres de final de línea de la primera línea. Y la captura de los paréntesis es solo hasta el final de línea, ya que el comodín '.' se para justo en el carácter anterior.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

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