regulares regular numeros letras jarroba expresiones expresion especiales espacio ejemplos cualquier caracteres caracter blanco alfanumerico regex perl

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