2009-11-08 59 views
1

我想分割字母數字(帶空格)和非字母數字用逗號分隔一個字符串。PHP正則表達式替換?

我這個嘗試...

$str = "This is [email protected]#$%^&"; 
preg_replace("/([a-z0-9_\s])([^a-z0-9_])/i", "$1, $2", $str); 

但我得到這個結果...

這就是!@#$%^ &

如何我可以修復搜索pattarn以獲得此結果嗎?

這就是!@#$%^ &

感謝。

回答

3

你應該已經否定了第一組中的一切第二,像這樣:

preg_replace("/([a-z0-9_\s])([^a-z0-9_\s])/i", "$1, $2", $str); 

否則,它會在空間劃分爲好。

+0

這將工作爲他的榜樣文本,但,因爲分裂的正則表達式是靜態的,它可能會不爲別的 – 2009-11-08 05:14:49

+0

很抱歉,但你是什麼意思的工作?可以分享一些它會失敗的例子嗎? – 2009-11-11 06:38:39

0

您可能必須在多次迭代中執行此操作。試試這個:

$preg = array("/([\w\s]+)/i", "/([\W\s]+)/i"): 
$replace = array("\\1, ", "\\1 "); 
$result = rtrim(preg_replace($preg, $replace, $input)); // rtrim to get rid of any excess spaces