Удаление повторяющихся слов из текста
Очень простое регулярное выражение для удаления дубликатов слов из текста.
Вариант 1
<?php
$str = 'Текст, содержащий дубликаты слов';
$str = preg_replace("#\s(\w+\s)\1#siu", "$1", $str);
echo $str;
Вариант 2
Основано на комменатриях пользователей и старом-добром форуме «Киберфорум».
<?php
/**
* Удаляет дубликаты слов в переданной строке.
*
* @param string $text Исходная строка.
* @return string Строка без дубликатов.
*/
function delete_duplicates_words( string $text ): string {
$text = implode( array_reverse( preg_split( '//u', $text ) ) );
$text = preg_replace( '/(\b[\pL0-9]++\b)(?=.*?\1)/siu', '', $text );
$text = implode( array_reverse( preg_split( '//u', $text ) ) );
$text = preg_replace( '#\s+#', ' ', $text );
return $text;
}
$str = 'янтарь натуральный натуральный камень янтарь натуральный жемчуг';
echo delete_duplicates_words( $str );
// Выводит:
// янтарь натуральный камень жемчуг
Не вышло
Что не вышло?
Не работает ваша конструкция
Покажите ваш пример, пожалуйста
$str = preg_replace(‘/(b[pL0-9]++b)(?=.*?1)/siu’, », $str); — у меня так выходит.
Можно и так)
Не подскажите, а как сделать для ссылок? Если есть повторяющиеся ссылки, то удаляет все повторяющиеся элементы, а слеши от ссылки оставляет…
Спасибо заранее!
Для ссылок нужно писать выражение намного сложнее
Простое и нерабочее. Хоть бы проверял
Вот прямо на этом сайте данное решение работает более 9 лет. У вас версия РНР какая? Есть ли поддержка UTF-8, mb_string?
Не корректно работает, еще и портит.
Из строки «янтарь натуральный натуральный камень янтарь натуральный жемчуг»
делает «янтарьнатуральный камень янтарь натуральный жемчуг»
PHP 8.2 UTF-8, mb_string всё есть.
Посту 11 лет. Возможно, что-то и перестало работать в РНР 8.2
Попробуйте второй вариант из статьи, он точно работает.
Спасибо!
хотя, если уж вы начали использовать массивы, то вот такой вариант имхо лучше:
не работает ничего т.к ничего нет