Comment puis-je substituer des correspondances d'expressions rationnelles et mapper les substitutions dans Perl?
-
05-07-2019 - |
Question
I.e.:
echo H#97llo | MagicPerlCommand
Stdout:
Hallo
étaient MagicPerlCommand est quelque chose comme
perl -pnle "s/#(\d+)/chr(\1)/ge"
(mais cela ne fonctionne pas).
La solution
Remplacez \ 1
par $ 1
dans votre MagicPerlCommand. Le style de référence arrière \ digit
ne fonctionne pas lorsque l'expression de remplacement est évaluée (c'est-à-dire s /// e
).
Cela a fonctionné pour moi sous Windows et Linux.
Autres conseils
Conformément à la j_random_hacker
, vous devez utiliser $ 1
plutôt que \ 1
.
Cela est dû au fait que l'utilisation du modificateur " / e
" dans l'expression régulière signifie que la moitié droite est simplement une autre expression Perl normale, et non une substitution d'expression régulière. Comme il s’agit de Perl, vous devez utiliser la syntaxe de Perl pour la référence du crochet, et non la syntaxe habituelle des expressions rationnelles.