Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式替换?_Php_Regex_Preg Replace - Fatal编程技术网

PHP正则表达式替换?

PHP正则表达式替换?,php,regex,preg-replace,Php,Regex,Preg Replace,我想在字符串中用逗号拆分字母数字和非字母数字 我试着用这个 $str = "This is !@#$%^&"; preg_replace("/([a-z0-9_\s])([^a-z0-9_])/i", "$1, $2", $str); 但是我得到了这个结果 这是!@$%^& 如何修复搜索模式以获得此结果 这是!@$%^& 谢谢。你应该为第二组否定第一组中的所有内容,如下所示: preg_replace("/([a-z0-9_\s])([^a-z0-9_\s])/i", "$1, $2"

我想在字符串中用逗号拆分字母数字和非字母数字

我试着用这个

$str = "This is !@#$%^&";
preg_replace("/([a-z0-9_\s])([^a-z0-9_])/i", "$1, $2", $str);
但是我得到了这个结果

这是!@$%^&

如何修复搜索模式以获得此结果

这是!@$%^&


谢谢。

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

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

否则,它也会在空间上拆分。

您可能需要在多次迭代中执行此操作。试试这个:

$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

这对他的示例文本有效,但是,因为用于拆分的正则表达式是静态的,所以它可能不适用于其他任何东西,但是您的意思是什么?可以分享一些失败的例子吗?