2016-04-14 3 views
1

Я пытаюсь дезинформировать свою строку, поэтому она будет сделана только из символов A-Z (с символами unicode), 0-9 и «.», «,», «-».Удалить дублированные символы в строке

Пример

Maama-Paapaa-Test 

Должно быть

Mama-Papa-Test 

Что я сделал до сих пор

$string = 'lietuviškos'; 
$string .= ' [email protected]#$%^&*()(,,,*&^%AAAA-Sdas.. .d#$%@%@[email protected]@##$$%%^^&&**())__-+---++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); 

И единственная проблема здесь, если символ/символ дублируется где-то в строке он удалил этот символ char/string из строки везде.

Так

Maama-Paapaa-Test 

Становится

Mm-Pp-Test 
+1

Что делать, если (например) 'Moon' находится в строке, если она станет' Mon'? – Daan

+6

@ Даан и что такое Даан его Дэн? : D –

+2

@HamzaZafeer rofl :) – Daan

ответ

2

Что проблема с использованием простой (.)\1+

Я пытаюсь дезинфицировать свою строку, так что это будет сделано только из AZ (с символом unicode), 0-9 и ".", ",", "-".

Так что в вашем случае это будет ([A-Z0-9.,-])\1

Объяснение: Это будет захватывать символы в захваченном группе и проверить, если это повторяется с \1+.

Соответствие должно быть заменено на \1 i.e одного такого характера.

Regex101 Demo

Ideone Demo

+0

Нужно было внести некоторые изменения, чтобы соответствовать моему ответу, но работает хорошо – MyMomSaysIamSpecial

1

Пожалуйста, проверьте и дайте мне знать

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

Выход: мама-папа-Test

Thanks

Смежные вопросы