2

我正在尝试将我前一段时间在 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 单行吗?

4

3 回答 3

3
echo preg_replace('/([^a-zA-Z0-9])/',"\\\\$1",'aaa bbb::');
//output => aaa\ bbb\:\:
于 2011-06-06T11:33:36.867 回答
3

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

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

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

$ ./test.php 
aaa\ bbb\:\:
于 2011-06-06T12:02:17.703 回答
2

尝试:

echo preg_replace('~([^a-zA-Z0-9])~', '\\\\$1', 'aaa bbb::');
于 2011-06-06T11:34:12.220 回答