删除字符串中的重复字符

时间:2016-04-14 13:12:19

标签: php regex

我正在尝试清理我的字符串,因此只能使用A-Z(带有unicode),0-9和“。”,“,”,“ - ”符号。

实施例

Maama-Paapaa-Test

必须

Mama-Papa-Test

到目前为止我做了什么

$string = 'lietuviškos';
$string .= ' +!@#$%^&*()(,,,*&^%AAAA-Sdas.. .d#$%@%@dasf0000-!!@@##$$%%^^&&**())__-+---++aaaa';
$string .= ' klaviatūros-įgūdžiams';

$string = preg_replace('/[^\p{L}\p{N} \-]/u', null, $string);
$string = preg_replace('/[,-.]/u', null, $string);
$string = ucfirst(strtolower($string));

var_dump($string);

这里唯一的问题是,如果字符串中的字符/符号重复某处,它会从字符串到处中删除此字符/符号。

所以

Maama-Paapaa-Test

变为

Mm-Pp-Test

2 个答案:

答案 0 :(得分:2)

使用简单的(.)\1+

有什么问题
  

我正在尝试清理我的字符串,因此只能使用AZ(使用unicode),0-9和"。",",",& #34; - "符号。

因此,在您的情况下,它将是([A-Z0-9.,-])\1

说明:这将捕获已捕获组中的字符,并检查它是否与\1+重复。

匹配应替换为\1,即单个此类字符。

<强> Regex101 Demo

<强> Ideone Demo

答案 1 :(得分:1)

请检查并告诉我

<?php echo preg_replace("/(.)\\1+/", "$1", "Maama-Paapaa-Test"); ?>

输出: Mama-Papa-Test

由于