¿Cómo puedo sustituir las coincidencias de expresiones regulares y asignar las sustituciones en Perl?

StackOverflow https://stackoverflow.com/questions/420410

  •  05-07-2019
  •  | 
  •  

Pregunta

I.e .:

echo H#97llo | MagicPerlCommand

Stdout:

Hallo

donde MagicPerlCommand es algo así como

perl -pnle "s/#(\d+)/chr(\1)/ge"

(pero eso no funciona).

¿Fue útil?

Solución

Cambie \ 1 a $ 1 en su MagicPerlCommand. El estilo de referencia inversa \ digit no funciona cuando se evalúa la expresión de reemplazo (es decir, s /// e ).

Eso me funcionó en Windows y Linux.

Otros consejos

Según la respuesta de j_random_hacker , debe utilizar $ 1 en lugar de \ 1 .

Esto se debe a que el uso del modificador ' / e ' en la expresión regular significa que la mitad derecha es solo otra expresión normal de Perl, y no una sustitución de expresiones regulares. Como se trata de Perl, debe usar la sintaxis de Perl para la referencia del corchete y no la sintaxis habitual de expresiones regulares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top