Ted's Blog



PHP-删除重复的标点符号



DEMO:

<?php

$str = "Hello...  how   are you!!??  I''m bored!!----!!!&&&&&^^^^%%%(()))((<<<<<";
$str = preg_replace('~((?<!:)[^\p{L}\p{N}])\1+~u', '$1', $str);

// 输出:Hello. how are you!? I'm bored!-!&^%()(<
echo $str.PHP_EOL;



?>


正则解释:

[^\p{L}\p{N}] - 匹配除Unicode字母数字字符外的所有字符

(?<!:) - 仅在不以":"开头的情况下进行匹配,以保全 http://...

([^\p{L}\p{N}]) - 在第1组中捕获以上内容以供反向参考

\1+ - 匹配捕获到的#1组中的一个或多个,从而确保匹配两个或多个相同的非字母数字将其替换为 $1 ,即捕获的非字母数字字符


[^\p{L}\p{N}] - Match anything but unicode alphanumeric character

(?<!:) - Match only if not precede by : to take care of http://...

([^\p{L}\p{N}]) - Capture above in a group #1 for back-reference

\1+ - Match one or more of captured group #1, thus making sure 2 or more of same non-alphanumeric is matched Replace it by $1 i.e. the captured non-alphanumeric character



原文章:https://ask.csdn.net/questions/775111


分享:

写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn