我想删除相同的重复非单词字符。
我的代码如下所示:
<?php
$name = 'Malines - Blockbuster (prod. Malines) ***** (((((( &%^$';
echo preg_replace('/[^\pL\pN\s]{2,}/u', '', $name);
?>
Malines - Blockbuster (prod. Malines) ***** (((((( &%^$
应为Malines - Blockbuster (prod. Malines) &%^$
只应删除重复的非单词字符。你能帮帮我吗?
答案 0 :(得分:2)
您必须使用反向引用来表示第二个字符与之前的字符相同:
/([^\pL\pN\s])\1+/u
答案 1 :(得分:1)
使用与Arlaud Agbe Pierre相同的想法(这是做到这一点的方法),可以使用Xan字符类缩短模式。 \p{Xan}
是\p{L}
和\p{N}
的联合。 \P{Xan}
(带有大写的“p”)是对这个类的否定(即所有不是字母或数字)。
$str = 'Malines - Blockbuster (prod. Malines) ààà ***** (((((( &%^$';
echo preg_replace('~(\P{Xan})\1+~u', '$1', $str);
注意:在此模式中,也会删除连续的白色字符。
另一种方式:
echo preg_replace('~(\P{Xan})\K\1+~u', '', $str);
其中\K
从匹配结果重置匹配的开头。 (请注意,您可以在之后使用之前定义捕获组)