PHP:转义非字母数字字符

时间:2011-06-06 11:29:19

标签: php regex escaping alphanumeric

我正在尝试将我在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单行吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:2)

尝试:

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