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
展开
 我来答
紫薇参星
科技发烧友

2019-06-10 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3607万
展开全部

按照你的要求编写的把除字母外的其他空格替换成逗号的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,关之琳

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式