PHP:转义非字母数字字符

发布于 2024-11-13 07:37:18 字数 445 浏览 3 评论 0原文

我正在尝试将我不久前在 bash 中编写的脚本移植到 PHP 中。其中一行是关于转义所有非字母数字字符的。

在 bash 中,我能够将其作为一行操作,如下所示:

echo "aaa bbb::" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g'
# => aaa\ bbb\:\:

我在 PHP 中得到的最接近的是这样的:

echo preg_replace('/([^a-zA-Z0-9])/','\\\','aaa bbb::');
# => aaa\bbb\\

但是我正在努力在 preg_replace 中重用我的正则表达式组(我尝试过 \ 1 和 1 美元)。

有人可以帮我正确地写出这段 PHP 语句吗?

I'm trying to port a script that I wrote in bash some time ago into PHP. One particular line is about escaping all non-alphanumeric characters.

In bash, I was able to do it as a one-liner as follows:

echo "aaa bbb::" | sed 's/\([^a-zA-Z0-9]\)/\\\1/g'
# => aaa\ bbb\:\:

The closest I got in PHP was with this:

echo preg_replace('/([^a-zA-Z0-9])/','\\\','aaa bbb::');
# => aaa\bbb\\

However I'm struggling to reuse my regex group inside preg_replace (I tried \1 and $1).

Can someone help me get this PHP one-liner right please?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

暮倦 2024-11-20 07:37:18
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:
飘落散花 2024-11-20 07:37:18

使用 [^[:alnum:]] 表示您的语言环境中的所有非字母数字字符,并且不要忘记双倍转义反斜杠:

$ cat test.php
#!/usr/bin/env php

<?
echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
?>

$ ./test.php 
aaa\ bbb\:\:

Use [^[:alnum:]] to represent all non-alphanumeric characters in your locale and don't forget to double-double escape your backslashes:

$ cat test.php
#!/usr/bin/env php

<?
echo preg_replace('/([^[:alnum:]])/', '\\\\$1', 'aaa bbb::');
?>

$ ./test.php 
aaa\ bbb\:\:
半世晨晓 2024-11-20 07:37:18

尝试:

echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');

Try:

echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文