Sólo quería replantear las respuestas anteriores un poco diferente; en cuenta que en este caso:
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /Xy = 3/;'
1
... Podemos obtener 1 está imprimiendo a cabo - como en "sí, tengo un partido". Si queremos devolver la parte texto coincidente, como @markusk señaló, "uso de paréntesis en expresiones regulares para capturar subseries":
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /(Xy = 3)/;'
Xy = 3
Sin embargo, tenga en cuenta que es posible que tenga un problema de concatenación de cadenas con este idioma, cuando captura:
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /Xy = 3/ . "\n";'
1 # OK
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /(Xy = 3)/ . "\n";'
1 # NOT OK
... así que probablemente mejor mantener las cosas separadas en ese caso:
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /(Xy = 3)/ ; print "\n";'
Xy = 3 # OK again
Sin embargo, si queremos capturar "algo", dicen un dígito - a continuación, ya que utilizamos paréntesis, volvemos automáticamente justo ese partido con este idioma (no todo el "buscado" string):
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /Xy = (\d)/ ; \
print "\n";'
3
...por lo tanto, para capturar la cadena buscada en su totalidad, debemos envolverlo de nuevo en paréntesis:
$ perl -e '$str="the variable Xy = 3 in this case"; print $str =~ /(Xy = (\d))/ ; \
print "\n";'
Xy = 33
.... pero, no obtenemos lo que esperamos, porque ahora hay dos partidos, y $1
$2
; y aparentemente el modismo "print $str =~ /.../
" genera todas las coincidencias (en este caso, "$1$2
").
Para conseguir tan sólo la cadena buscada en este caso coincidencias anidada, que ahora tenemos especificar explícitamente única $1
:
$ perl -e '$str="the variable Xy = 3 in this case"; $str =~ /(Xy = (\d))/ ; \
print "$1 \n";'
Xy = 3
EDITAR oct 2013: Via Assign one of multiple regex matches to variable as Perl one-liner (dereference array?) - También esto se puede hacer por uno liner:
$ perl -e '$str="the variable Xy = 3 in this case"; \
print (($str =~ /(Xy = (\d))/)[1]); print "\n";'
3
... sin embargo, tenga en cuenta la necesidad de un segundo conjunto envolvente de paréntesis para el print
para trabajar directamente con devolvió la expresión regular (Anonymo nosotros?) matriz.
Por último, en un contexto de múltiples líneas, asegúrese de primera "slurp" todo el archivo/texto en una sola cadena; a continuación, utilizar el /s
(modo de una sola línea = salto de línea se corresponde) y /g
(partidos globales/múltiple) - y, por último, asegúrese de que la expresión de coincidencia es en un bucle while
, con el fin de recorrer todos los partidos:
$ echo "some data
IN
123
OUT
some more data
is about to follow:
IN
256
OUT
done with data
out" | perl -e '$str = do { local $/; <> }; while ($str =~ /(IN(.*?)OUT)/sg) { print "$1\n"} '
IN
123
OUT
IN
256
OUT
Bueno, espero que esto ayude a alguien,
¡Salud!
Gracias, pero es posible decir el valor de impresión (número) en la que está presente en la cadena "tranaction éxito". – Allwyn
hola markusk dado la respuesta. – Allwyn