PHP如何利用正则表达式匹配替换以下类型
想把除字母外的其他空格替换成“,”该怎么写以下规则无法替换成功$str="李连杰JetLi关之琳Marc-AndréGrondin,莫妮亚·肖克里,CharlotteSt...
想把除字母外的其他空格替换成“,”该怎么写以下规则无法替换成功
$str="李连杰 Jet Li 关之琳 Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin BB,CC DD";
$newstr=preg_replace('/(?<!\p{L}|\p{So})\s+|\s+(?!\p{L}|\p{So})/',',',$str);
echo $newstr;
求最终替换成此效果:李连杰,Jet Li,关之琳,Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin,CC DD 展开
$str="李连杰 Jet Li 关之琳 Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin BB,CC DD";
$newstr=preg_replace('/(?<!\p{L}|\p{So})\s+|\s+(?!\p{L}|\p{So})/',',',$str);
echo $newstr;
求最终替换成此效果:李连杰,Jet Li,关之琳,Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin,CC DD 展开
展开全部
按照你的要求编写的把除字母外的其他空格替换成逗号的PHP程序如下
<?php
$str="李连杰 Jet Li 关之琳 Marc-André Grondin 莫妮亚·肖克里 Charlotte St-Martin BB CC DD";
$newstr=preg_replace('/([\x{4e00}-\x{9fa5}a-z]+)\s+([\p{L}\p{So}\-]+\s+[\p{L}\p{So}\-]+)\s+/iu','$1,$2,',$str);
$newstr=preg_replace('/([\x{4e00}-\x{9fa5}a-z]+)\s+([\p{L}\p{So}\-]+\s+[\p{L}\p{So}\-]+)$/iu','$1,$2',$newstr);
echo $newstr;
?>
运行结果
李连杰,Jet Li,关之琳,Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin,BB,CC DD
更多追问追答
追问
遇到以下的相反的顺序就不能正常替换了
$str="Marc-André Grondin 莫妮亚·肖克里 Charlotte St-Martin BB CC DD 李连杰 Jet Li 关之琳 ";
变成这样:Marc-André Grondin 莫妮亚·肖克里,********,李连杰,Jet Li,关之琳
正确的应该是:Marc-André Grondin,莫妮亚·肖克里 (受到字数限制后面省略)
追答
你要正反都可以,可以用下面的PHP程序(注意是去掉了BB CC DD的程序)
<?php
$str="李连杰 Jet Li 关之琳 Marc-André Grondin 莫妮亚·肖克里 Charlotte St-Martin";
$newstr=preg_replace('/(?<=[\x{4e00}-\x{9fa5}])\s+|\s+(?=[\x{4e00}-\x{9fa5}])/iu',',',$str);
echo $newstr;
?>
运行结果
李连杰,Jet Li,关之琳,Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin
<?php
$str="Marc-André Grondin 莫妮亚·肖克里 Charlotte St-Martin 李连杰 Jet Li 关之琳";
$newstr=preg_replace('/(?<=[\x{4e00}-\x{9fa5}])\s+|\s+(?=[\x{4e00}-\x{9fa5}])/iu',',',$str);
echo $newstr;
?>
运行结果
Marc-André Grondin,莫妮亚·肖克里,Charlotte St-Martin,李连杰,Jet Li,关之琳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询