Как я могу заменить совпадения регулярного выражения и отобразить замены в Perl? - PullRequest
3 голосов
/ 07 января 2009

то есть:.

echo H#97llo | MagicPerlCommand

Stdout:

Hallo

где MagicPerlCommand - это что-то вроде

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

(но это не работает).

Ответы [ 2 ]

10 голосов
/ 07 января 2009

Измените \1 на $1 в вашей MagicPerlCommand. Стиль обратной ссылки \digit не работает при оценке выражения замены (т.е. s///e).

Это сработало для меня в Windows и Linux.

4 голосов
/ 07 января 2009

Согласно ответу j_random_hacker, вы должны использовать $1 вместо \1.

Это потому, что использование модификатора '/e' для регулярного выражения означает, что правая половина - это просто другое нормальное выражение Perl, а не замена регулярного выражения. Поскольку это Perl, вы должны использовать синтаксис Perl для ссылки в скобках, а не обычный синтаксис регулярных выражений.

...