PHP正则表达式替换?

时间:2009-11-08 05:07:41

标签: php regex preg-replace

我想在字符串中用逗号分割字母数字(带空格)和非字母数字

我试过这个......

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

但我得到了这个结果......

  

这是,@!@ $%^&

如何修复搜索pattarn以获得此结果?

  

这是,@ @ $%^&

感谢。

2 个答案:

答案 0 :(得分:3)

你应该否定第一组中的所有内容,如下所示:

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

否则,它也会在空格上分开。

答案 1 :(得分: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