#php #regex #preg-replace
#php #регулярное выражение #preg-заменить
Вопрос:
Я пытаюсь preg_replace повторяющиеся слова, но ниже остается несколько слов. Я думаю, что это займет только первые два.
<?php
$text ='around background background background background';
$non_repeat = preg_replace("/b(w )s \1b/i", "$1", $text);
echo $non_repeat;
?>
Как это исправить?
Ответ №1:
Чтобы исключить все повторяющиеся слова, используйте это:
$replaced = preg_replace('~b(w )Kb(?:s*1) ~', '', $yourstring);
Посмотрите на вторую цветную группу в демонстрации.
Объяснение
b
является ли начальное слово границей(w )
записывает слово в группу 1K
Сообщает движку удалить то, что было сопоставлено до сих пор с окончательным совпадением, которое он возвращаетb
является ли граница закрывающего слова(?:s*1)
сопоставляет необязательные пробелы, затем группирует 1, один или несколько раз- мы заменяем это пустой строкой
Комментарии:
1. К вашему сведению: добавлена демонстрация и объяснение. 🙂
Ответ №2:
Приведенное ниже регулярное выражение заменит все фоновые строки одной фоновой строкой,
b(w )(?:s1)
Ваш PHP-код будет,
<?php
$text ='around background background background background';
$non_repeat = preg_replace("/b(w )(?:s\1) /i", "$1", $text);
echo $non_repeat;
?> //=> around background