2011-06-06 100 views
2

我試圖將前一段時間我在bash中編寫的腳本導入到PHP中。一條特定的線是關於轉義所有非字母數字字符。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一行嗎?

+1

可能一個愚蠢的問題,但爲什麼你需要逃避所有非字母字符? – jsalonen 2011-06-06 11:32:12

+1

,因爲我正在爲'mod_rewrite'生成過濾器,但它並不真的喜歡它們。 – Max 2011-06-06 13:51:49

回答

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

嘗試:

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

使用[^[:alnum:]]代表所有非字母數字字符在您的區域,不要忘了兩雙逃不出你的反斜線:

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

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

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

+1用於使用單引號提示'[^ [:alnum:]]'***和***! :P – 2011-06-06 12:05:55

相關問題