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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заменить обособленное слово 
:(
    Опции темы
Aliance
Дата 13.10.2008, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



У меня есть регулярка, замняющее слово test на другое определенное слово.
Код

$re = "|test|";

Но как сделать так, чтобы оно работало только если:
  • с обоих концов слова пробелы
  • с обоих концов слова начало и конец строки соответственно
  • всевозможные комбинации первых двух пунктов
Пробовал так:
Код

$re = "|[\s^]test[\s$]|";

Но не работает. Подскажите.
PM MAIL WWW ICQ Skype   Вверх
Sunvas
Дата 13.10.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Цитата(Aliance @  13.10.2008,  19:14 Найти цитируемый пост)

с обоих концов слова пробелы
с обоих концов слова начало и конец строки соответственно

По одному:
Код

'#(?<\s)test(?\s)#'
'#^test$#'


А вот комбинации, думаю лучше сделать "скрестив" оба варианта.

Это сообщение отредактировал(а) Sunvas - 13.10.2008, 19:54


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Aliance
Дата 13.10.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



По одному не подходит, иначе замена будет два раза происходить
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 13.10.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



а разве вариант с "множественным выбором" не работает?
Код

(^|\s)test($|\s)

уж не уверен наверняка, что именно в PHP, но где-то подобный финт точно работает!
PM MAIL   Вверх
Aliance
Дата 13.10.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(skyboy @  13.10.2008,  21:48 Найти цитируемый пост)
а разве вариант с "множественным выбором" не работает?

модификатор m? Он стоит.

Цитата(skyboy @  13.10.2008,  21:48 Найти цитируемый пост)
(^|\s)test($|\s)

попробую, сообщу.
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 13.10.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(Aliance @  13.10.2008,  19:55 Найти цитируемый пост)
модификатор m? Он стоит.

Хм. А конструкция 
Код

(variant1|variant2|variant3...)

как называется "по-правильному"? я именно это выбором называю..
PM MAIL   Вверх
sTa1kEr
Дата 14.10.2008, 00:09 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

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



Aliance, может быть вам нужно прсто заменить слово целиком? Тогда так проще:
Код

$re = "/\btest\b/";

Если же именно пробелы и начало/окончание строк должны идти, то почти как сказал skyboy, только нужно использовать утверждения, иначе будт так-же заменятся пробелы и не будут заменятся лова идущие подряд (к примеру " test test ")
Код

$re = "/(?<=\s|^)test(?=\s|$)/";

PM MAIL   Вверх
unicross
Дата 14.10.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sTa1kEr, отлично придумано!

Единственно если встерятся символы [,.?!] шаблон работать не будет. Предлагаю немного дополнить

Код

$re = "/(?<=\s|^)test(?=\s|$|[,.?!])/";


Код

$string = "test test, test\ntest! test? test. test1 test";
$pattern = "/(?<=\s|^)test(?=\s|$)/";
$replacement = "$1slon$2";
echo preg_replace($pattern, $replacement, $string);

echo "<BR>";

$string = "test test, test\ntest! test? test. test1 test";
$pattern = "/(?<=\s|^)test(?=\s|$|[,.?!])/";
$replacement = "$1slon$2";
echo preg_replace($pattern, $replacement, $string);


Выведет

Код

slon test, slon test! test? test. test1 slon
slon slon, slon slon! slon? slon. test1 slon

PM MAIL WWW   Вверх
SelenIT
Дата 16.10.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(skyboy @  13.10.2008,  22:07 Найти цитируемый пост)
как называется "по-правильному"?

..."альтернатива"?  smile 

Цитата(Aliance @  13.10.2008,  20:55 Найти цитируемый пост)
модификатор m? Он стоит.

А смысл, в данной задаче? Перевод строки ведь и так учитывается в \s...


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


 




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


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

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