preg_replace те же слова в строке

0

Строка: это текст: стена:: стена:: стена:: стена: больше текста

Выход должен быть: это текст: стена: больше текста

Задача: уменьшить слово: стена: только 1.

Я пробовал эти обе идеи, но не работал:

$post_message = preg_replace("/([\:wall:])+/", "\\1", $post_message);

$post_message = preg_replace('/:wall:/', '', $post_message, 1);
Теги:

4 ответа

1
Лучший ответ

Используйте приведенное ниже выражение в функции preg_replace.

Regex:

(:wall:)(?:\s+:wall:)+

ИЛИ

(:wall:)(?:\s+\1)+

Заменяемая строка:

$1

DEMO

Код:

<?php
$str = "this is text :wall: :wall: :wall: :wall: more text";
echo preg_replace('~(:wall:)(?:\s+\1)+~', '$1', $str);
?>

Вывод:

this is text :wall: more text

(:wall:) Снимает текст :wall: в группу. Это можно отнести к индексу группы 1. Таким образом, это (?:\s+\1)+ соответствует следующему одному или нескольким пробелам + :wall: строки. Замена совпадения символами внутри группового индекса 1 приведет к удалению всех дубликатов :wall: strings.

  • 0
    не могли бы вы показать мне окончательный код? Это не сработало: $ post_subject = preg_replace ("(: wall:) (?: \ S +: wall:) +", "\\ 1", $ post_subject);
  • 0
    Вы забыли добавить разделители. это не будет "(:wall:)(?:\s+:wall:)+" , это будет "~(:wall:)(?:\s+:wall:)+~"
Показать ещё 1 комментарий
0
(:wall:)(?=((?!\1).)*\1)

Попробуйте это. Замените empty string.

http://regex101.com/r/lZ5mN8/62

  • 0
    спасибо вкс. работает тоже!
0
$str = 'this is text :wall: :wall: :wall: :wall: more text';
$post_message = preg_replace("#(:wall:\s+)+#i", '\1', $str);
0

Согласно первому решению:

Мне нужно:

String1: это текст: (:( :( больше текста

String2: это текст:? :? :? больше текста

Результат должен быть: это текст: (больше текста

Результат должен быть: это текст:? больше текста

Задача: уменьшить смайлик :( только до 1.

Задача: уменьшить смайлик:? только 1.

Я пробовал их, но не работал:

$post_message = preg_replace('~(:()(?:\s+\1)+~', '$1', $post_message);

$post_message = preg_replace('~(:?)(?:\s+\1)+~', '$1', $post_message);

Еще раз спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню