PHP Regex去除多余的标点符号

标签 php regex

所以基本上我们需要一个正则表达式来从字符串中去除多余的标点符号,只留下一个标点字符。

所以:

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/

相关文章:

php - Yii PHP 框架教程

php - 选中复选框时如何为 SQL 表提供样式?

php - MySQL计数问题

php - Laravel 5.3 数据库 :seed command simply doesn't work

php - PHP处理脚本包含而不抑制其错误和警告

javascript - "\/"在 javascript 正则表达式中有效吗?

regex - UNIX 正则表达式根据索引位置从字符串中提取字段

javascript - 尝试使用正则表达式来匹配范围

javascript - 根据单词和带有 `^` 符号的突出显示部分分割字符串

php - 在MYSQL中如何匹配所有以数字或相关符号开头的元素?