preg replace删除相同的重复非单词字符

时间:2013-11-20 09:04:08

标签: char preg-replace character

我想删除相同的重复非单词字符。

我的代码如下所示:

<?php
$name = 'Malines - Blockbuster (prod. Malines) ***** (((((( &%^$';
echo preg_replace('/[^\pL\pN\s]{2,}/u', '', $name);
?>

Malines - Blockbuster (prod. Malines) ***** (((((( &%^$应为Malines - Blockbuster (prod. Malines) &%^$

只应删除重复的非单词字符。你能帮帮我吗?

2 个答案:

答案 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从匹配结果重置匹配的开头。 (请注意,您可以在之后使用之前定义捕获组)