所以基本上我们需要一个正则表达式来从字符串中去除多余的标点符号,只留下一个标点字符.
所以:
This is my awesome string!!!!! Don’t you love it???!!??!!
会导致
This is my awesome string! Don’t you love it?!
我已经尝试并试图得到这个,但我要么最终破坏字符串或它根本不起作用.我还在学习正则表达式,所以请原谅这肯定是一个愚蠢的问题.
我猜“标点符号”几乎就是A-Za-z0-9
编辑似乎我误解了我们的原始要求.使用下面接受的解决方案,我将如何调整它,以便无论你有什么字符,标点符号仅限于第一个?
IE
???!!!!!!
会变得公正
?
和
This is my string!!!?!?!?!? Isn’t it great???!?!?!!
会成为
This is my string! Isn’t it great?
解决方法:
与其他答案类似,但应该按照任何顺序处理任何非0-9a-zA-Z字符,留下每个左边的一个:
$newstring= preg_replace('/([^\w\s])(?=[^\w\s]*\1)/', '', $oldstring);
应该转
This is my awesome string!!!!! Don't you love it???!!??!!
成
This is my awesome string! Don't you love it?!
它的工作原理是使用正向前瞻来查看该字符串中是否再次出现该字符.如果是,则用空字符串替换.
标签:php,regex
来源: https://codeday.me/bug/20190529/1181817.html