所以基本上我们需要一个正则表达式来从字符串中去除多余的标点符号,只留下一个标点字符。
所以:
This is my awesome string!!!!! Don't you love it???!!??!!
会导致
This is my awesome string! Don't you love it?!
我已经试了又试了又想得到这个,但我要么最终破坏了字符串,要么它根本不起作用。我仍在学习正则表达式,所以请原谅我提出的一个愚蠢的问题。
我想“标点符号”几乎可以是任何不是 A-Za-z0-9 的东西
编辑 看来我误解了我们最初的要求。使用下面接受的解决方案,我将如何调整它,以便无论您有什么字符,标点符号都仅限于第一个?
浏览器
???!!!!!!
会变成只是
?
和
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去除多余的标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12218650/