Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление повторяющихся фраз из строки, Удаление повторяющихся фраз из строки 
V
    Опции темы
manjak
Дата 20.1.2013, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.1.2013

Репутация: нет
Всего: нет



Добрый день.
Нужна помощь  с регуляркой замены.
Суть такова, есть строка "слово 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  не заменяет ее.
Как и что нужно изменить в регулярке?
PM MAIL   Вверх
Arantir
Дата 20.1.2013, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



Код

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

Задачу вы поставили довольно абстрактно. Чтобы ее решить, то и регулярки, как таковой, не требуется... Например, http://regexr.com?33fc0

Это сообщение отредактировал(а) Arantir - 20.1.2013, 19:24


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
manjak
Дата 20.1.2013, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.1.2013

Репутация: нет
Всего: нет



preg_quote использую на случай наличия спец символов в фразе, в данном случае оно не надо, так как в примере все довольно просто.

то что вы предлагаете немного не подходит.
Если мы будем иметь строку "слово 1 слово 1-еще слово слово 1 слово 1 слово 1 и всеслово 1 "
то после применения того что вы предлагаете получим "слово 1-еще слово и все"
а должны "слово 1-еще слово и всеслово 1". Вот как то так. Задача моя в чем, есть фраза, которую надо заменить допустим на пробелы. Фраза может находиться как в начале строки, так и в конце. и фраза должна быть не составляющей слова, тоесть быть отделена пробелами.
PM MAIL   Вверх
Arantir
Дата 20.1.2013, 19:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 1
Всего: 55



Тогда не следует включать в результат пробел перед словом, а только пробел после. Делается с помощью лукхэдов.
(?<=^| )слово 1($| )
В результате выйдет то, что вы попросили в последнем посте.
Пример http://regexr.com?33fcf

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

Могу повторить еще раз, что вы неправильно ее используете, хоть на случай, хоть без случая.



--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
manjak
Дата 20.1.2013, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.1.2013

Репутация: нет
Всего: нет



Спасибо. С позитивным просмотром назад работает. Я так и думал что ответ кроется где-то в просмотрах вперед и назад.
PM MAIL   Вверх
manjak
Дата 20.1.2013, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.1.2013

Репутация: нет
Всего: нет



Вопрос решен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.