我正在尝试将我在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单行吗?
答案 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::');