¿Cómo puedo sustituir las coincidencias de expresiones regulares y asignar las sustituciones en Perl?
-
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).
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