如何替换正则表达式匹配并在 Perl 中映射替换?

发布于 2024-07-11 13:00:22 字数 226 浏览 9 评论 0原文

即:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倾城°AllureLove 2024-07-18 13:00:22

在 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.

最后的乘客 2024-07-18 13:00:22

根据 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文