regex - numeros - expresiones regulares java alfanumerico
¿Cómo puedo encontrar todas las coincidencias con una expresión regular en Perl? (5)
En lugar de usar una expresión regular, es posible que prefieras probar un motor de gramática como:
He dado un fragmento de una respuesta Parse::ResDescent antes en SO. Sin embargo, Regexp :: Grammars se ve muy interesante y está influenciado por las reglas y gramáticas de Perl6 .
Así que pensé que tendría un crack en Regexp :: Grammars ;-)
use strict;
use warnings;
use 5.010;
my $text = q{
Name=Value1
Name = Value2
Name=Value3
};
my $grammar = do {
use Regexp::Grammars;
qr{
<[VariableDeclare]>*
<rule: VariableDeclare>
<Var> /= <Value>
<token: Var> Name
<rule: Value> <MATCH= ([/w]+) >
}xms;
};
if ( $text =~ $grammar ) {
my @Name_values = map { $_->{Value} } @{ $/{VariableDeclare} };
say "@Name_values";
}
El código anterior da salida a Value1 Value2 Value3
.
¡Muy agradable! La única advertencia es que requiere Perl 5.10 y que puede ser excesivo para el ejemplo que proporcionó ;-)
/ I3az /
Tengo texto en el formulario:
Name=Value1
Name=Value2
Name=Value3
Usando Perl, me gustaría hacer coincidir /Name=(.+?)/
cada vez que aparezca y extraer el (. +?) Y insertarlo en una matriz. Sé que puedo usar $1
para obtener el texto que necesito y puedo usar =~
para realizar la comparación de expresiones regulares, pero no sé cómo obtener todas las coincidencias.
Lo siguiente le dará todas las coincidencias a la expresión regular en una matriz.
push (@matches,$&) while($string =~ /=(.+)$/g );
Una m//g
en el contexto de la lista devuelve todas las coincidencias capturadas.
#!/usr/bin/perl
use strict; use warnings;
my $str = <<EO_STR;
Name=Value1
Name=Value2
Name=Value3
EO_STR
my @matches = $str =~ /=(/w+)/g;
# or my @matches = $str =~ /=([^/n]+)/g;
# or my @matches = $str =~ /=(.+)$/mg;
# depending on what you want to capture
print "@matches/n";
Sin embargo, parece que está analizando un archivo de configuración de estilo INI. En ese caso, recomendaré Config::Std .
Utilice un módulo Config::
para leer los datos de configuración. Para algo tan simple como eso, podría buscar ConfigReader::Simple . Es bueno mantenerse fuera de la maleza siempre que pueda.
my @values;
while(<DATA>){
chomp;
push @values, /Name=(.+?)$/;
}
print join " " => @values,"/n";
__DATA__
Name=Value1
Name=Value2
Name=Value3