Mar Nov 14, 2006 6:46 pm
|
 |
scorpion
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 21
|
|
| expresiones regulares... |
|
|
hola a todos...
resulta que estoy extrayendo valores de un fichero de configuración de formato:
| Código: |
nombre1 = cadena1
nombre2 = cadena2
......
|
tengo el siguiente código.
| Perl: | while (<LOG>) {
chomp;
next if !/^\ s* (\w+ )\ s*=\ s* (\w [\ s\w ]+\w )\ s*$/;
$var{$ 1} = $ 2;
} |
este me funciona... PEROOOOO si una de las cadenas tiene un punto (.) ya no me lo toma.... ¿¿¿ cómo podría modificar la linea de la expresión regular para poder obtener el valor ???
Gracias por adelantado...
saludos...
scorpion.... |
|
|
|
Mar Nov 14, 2006 6:49 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
|
|
|
|
|
Porque no usas la función split y ya...
| Perl: | my @lines = <LOG>;
foreach my $line (@lines) {
my ($key, $value) = split(/=/, $line);
} |
Espero que te sirva
Saludos |
|
Mar Nov 14, 2006 6:55 pm
|
 |
scorpion
Perlero Nuevo

|
Registrado: 31 May 2006
Mensajes: 21
|
|
|
|
|
pero es que con esa función tomaría los espacios en blanco al principio y al final de las nombre y las cadenas si los tuvieran.... también quiero quitarle los espacios en blanco....
gracias por tan pronta respuesta... ¿¿¿ alguna nueva idea ???
gracias por adelantado...
scorpion... |
|
Mar Nov 14, 2006 7:41 pm
|
 |
jclp77
Perlero Nuevo

|
Registrado: 06 Sep 2006
Mensajes: 21
Ubicación: México
|
|
|
|
|
Hola, la verdad no se muy bien programar en Perl, pero tal vez este ejemplo rudimentario te pueda servir. Espero sea lo que necesitas
| Perl: | @lines= (" nombre1 12 1 = cadena1 11 11 ", " no mb re 2 = ca den a2 ");
foreach my $line (@lines){
my ($key, $value) = split(/=/, $line);
$key =~ s/^\ s+|\ s+$//g;
$value =~ s/^\ s+|\ s+$//g;
print "$key=$value\n";
} |
Saludos |
|

Mar Nov 14, 2006 8:26 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
|
Menos es más.
Vemos, según tu expresión regular, que en la primera parte, antes del '=' hay caracteres alfanuméricos. El problema es si aparece ahí un '.'.
Y en la segunda parte, hay mezcla de espacios en blanco y alfanuméricos. Es decir, de todo.
Entonces, al principio, necesitas buscar todo aquello que no sea un espacio en blanco, junto que todo aquello que no sean espacios al final de la línea, después:
| Perl: | while (<LOG>) {
chomp;
if ( /^\ s* (\S+ )\ s*=\ s* (.+ )\ s*$/ ) {
$var{$ 1} = $ 2;
}
} |
|
|
Powered by phpBB © 2001, 2005 phpBB Group
|