Удаление повторяющихся фраз из строки

 
0
 
PHP
ava
manjak | 20.01.2013, 19:51
Добрый день.
Нужна помощь  с регуляркой замены.
Суть такова, есть строка "слово 1 слово 1-еще слово слово 1 слово 1 и все".
Фразу, которую надо удалить - "слово 1".

Вот что у меня есть:

$str = 'слово 1 слово 1-еще слово слово 1 слово 1 и все';
$kwd = 'слово 1';
$pattern = '/(^| )'.preg_quote($kwd, '/').'($| )/ims';
$str = preg_replace($pattern, ' ', $str, -1, $cnt_replace);
echo $str;


Вот что я получаю после приминения: "слово 1-еще слово слово 1 и все" .
Вот что хотелось бы получить: "слово 1-еще слово и все".

Вот в чем проблема: если искомая фраза повторяется через пробел, то preg_replace  не заменяет ее.
Как и что нужно изменить в регулярке?
Ответы (5)
ava
Арантир | 20.01.2013, 19:23 #

preg_quote($kwd, '/')
Как бы экранировать надо обратным слешем "\". При наличии спец. символа в $kwd вы бы увидели ошибку вроде "Unknown modifier '/'".

Задачу вы поставили довольно абстрактно. Чтобы ее решить, то и регулярки, как таковой, не требуется... Например, http://regexr.com?33fc0
ava
manjak | 20.01.2013, 19:39 #
preg_quote использую на случай наличия спец символов в фразе, в данном случае оно не надо, так как в примере все довольно просто.

то что вы предлагаете немного не подходит.
Если мы будем иметь строку "слово 1 слово 1-еще слово слово 1 слово 1 слово 1 и всеслово 1 "
то после применения того что вы предлагаете получим "слово 1-еще слово и все"
а должны "слово 1-еще слово и всеслово 1". Вот как то так. Задача моя в чем, есть фраза, которую надо заменить допустим на пробелы. Фраза может находиться как в начале строки, так и в конце. и фраза должна быть не составляющей слова, тоесть быть отделена пробелами.
ava
Арантир | 20.01.2013, 19:52 #
Тогда не следует включать в результат пробел перед словом, а только пробел после. Делается с помощью лукхэдов.
(?<=^| )слово 1($| )
В результате выйдет то, что вы попросили в последнем посте.
Пример http://regexr.com?33fcf

Цитата (manjak @  20.1.2013,  18:39 findReferencedText)
preg_quote использую на случай наличия спец символов в фразе

Могу повторить еще раз, что вы неправильно ее используете, хоть на случай, хоть без случая.
ava
manjak | 20.01.2013, 20:14 #
Спасибо. С позитивным просмотром назад работает. Я так и думал что ответ кроется где-то в просмотрах вперед и назад.
ava
manjak | 20.01.2013, 22:49 #
Вопрос решен.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить