如何替换正则表达式匹配并在 Perl 中映射替换?
即:
echo H#97llo | MagicPerlCommand
Stdout:
Hallo
MagicPerlCommand 是类似的东西
perl -pnle "s/#(\d+)/chr(\1)/ge"
(但这不起作用)。
I.e.:
echo H#97llo | MagicPerlCommand
Stdout:
Hallo
were MagicPerlCommand is something like
perl -pnle "s/#(\d+)/chr(\1)/ge"
(but that doesn't work).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 MagicPerlCommand 中将
\1
更改为$1
。 当计算替换表达式时(即s///e
),\digit
反向引用样式不起作用。这对我在 Windows 和 Linux 上都有效。
Change
\1
to$1
in your MagicPerlCommand. The\digit
backreference style doesn't t work when the replacement expression is evaluated (i.e.s///e
).That worked for me on Windows and Linux.
根据
j_random_hacker
答案,您必须使用$1
而不是<代码>\1。这是因为对正则表达式使用“
/e
”修饰符意味着右半部分只是另一个普通的 Perl 表达式,而不是正则表达式替换。 由于它是 Perl,因此您必须使用 Perl 的语法来进行括号引用,而不是通常的正则表达式语法。As per the
j_random_hacker
answer, you must use$1
rather than\1
.This is because using the '
/e
' modifier to the regex means the right hand half is just another normal Perl expression, and not a regex substitution. Since it's Perl, you've got to use Perl's syntax for the bracket reference, and not the usual regex syntax.