tester regex perl substring

regex - tester - ¿Cómo puedo encontrar una subcadena dentro de una cadena usando Perl?



perl=~ (4)

Tengo una cadena desde la que deseo extraer una sola palabra, pero con un número adicional, que puede ser diferente en cada línea:

This is string1 this is string This is string11 This is string6 and it is in this line

Quiero analizar este archivo y obtener los valores de "stringXXX", comenzando desde 0 hasta 100

# suppose ABC.txt contains the above lines FH1 = open "Abc.txt"; @abcFile = <FH1>; foreach $line(@abcFile) { if ($pattern =~ s/string.(d{0}d{100}); print $pattern;

Lo anterior imprime toda la línea, deseo obtener solo stringXXX


Abc.pl:

#!/usr/bin/perl -w while(<>) { while (/(string(/d{1,3}))/g) { print "$1/n" if $2 <= 100; } }

Ejemplo:

$ cat Abc.txt This is string1 this is string This is string11 This is string6 and it is in this line string1 asdfa string2 string101 string3 string100 string1000 string9999 string001 string0001 $ perl Abc.pl Abc.txt string1 string11 string6 string1 string2 string3 string100 string100 string001 string000 $ perl -nE"say $1 while /(string(?:100|/d{1,2}(?!/d)))/g" Abc.txt string1 string11 string6 string1 string2 string3 string100 string100

Tenga en cuenta la diferencia entre las salidas. Lo que es preferible depende de tus necesidades.


Simplemente cambie print $ pattern para imprimir $ &, que ya está capturado.


No sobreespecifique. Para capturar la parte numérica, simplemente use (/ d +). Esto capturará una cantidad de cualquier longitud, de modo que algún día cuando los monos que le proporcionan este archivo decidan ampliar su rango hasta 999, estará cubierto. También es menos pensado, tanto ahora cuando estás escribiendo, y más tarde cuando estás manteniendo.

Sea estricto en lo que emita, pero sea liberal en lo que acepta.


necesitas capturarlo:

while ($pattern =~/(string(100|/d{1,2}))/g) { print $1; }

Explicación:

  • los paréntesis capturan lo que hay en ellos en $ 1. Si tiene más de un juego de paréntesis, el primero lo convierte en $ 1, el segundo en $ 2, etc. En este caso, $ 2 tendrá el número real.
  • / d {1,2} captura entre 1 y 3 dígitos, lo que le permite capturar entre 0 y 99. Los 100 adicionales allí le permiten capturar 100 de forma explícita, ya que es el único número de 3 dígitos que desea emparejar.

editar: arregla el orden de los números que se capturan.