[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: замена целого слова в строке
Snake22
подскажите как заменить в строке целое слово?
то есть вот например, строка
$str='куда да вода да' и нужно заменить только все слово 'да' на 'нет'
после замены должно быть $str='куда нет вода нет'
чтоб при этом остальные слова не менялись -> вода вонет




Спустя 32 минуты, 35 секунд (29.09.2012 - 21:31) Игорь_Vasinsky написал(а):
preg_replace()

Спустя 36 секунд (29.09.2012 - 21:31) rooor написал(а):
думаю вариантов тут много, мой велосипед такой -
echo str_replace(" да", " нет", "куда да вода да");

Спустя 45 секунд (29.09.2012 - 21:32) h234 написал(а):
$str = preg_replace("/\bда\b/u","нет","куда да вода да");
echo $str;

\b - это граница слова

Спустя 2 минуты, 20 секунд (29.09.2012 - 21:34) Snake22 написал(а):
спасибо.
а ещё, как сделать это без учета регистра?
а то если ДА в строке "куда ДА вода да" написать большими ,то уже не заменяет если в условии замены маленькими прописано

Спустя 3 минуты, 49 секунд (29.09.2012 - 21:38) rooor написал(а):
preg_replace("/\bда\b/iu","нет","куда ДА вода да");
:)

Спустя 2 минуты, 29 секунд (29.09.2012 - 21:41) Игорь_Vasinsky написал(а):
ohmy.gif

Спустя 1 минута, 26 секунд (29.09.2012 - 21:42) Snake22 написал(а):
rooor спасибо smile.gif

Спустя 8 секунд (29.09.2012 - 21:42) killer8080 написал(а):
Цитата (h234 @ 29.09.2012 - 21:32)
\b - это граница слова

только с кириллицей траблы smile.gif

Спустя 3 минуты, 48 секунд (29.09.2012 - 21:46) h234 написал(а):
Цитата (killer8080 @ 29.09.2012 - 18:42)
Цитата (h234 @ 29.09.2012 - 21:32)
\b - это граница слова

только с кириллицей траблы smile.gif

for example?

Спустя 1 минута, 1 секунда (29.09.2012 - 21:47) killer8080 написал(а):
Цитата (h234 @ 29.09.2012 - 21:46)
for example?

запусти свой код

Спустя 7 минут, 23 секунды (29.09.2012 - 21:54) h234 написал(а):
Ну, все прекрасно отработало!
Кодировка utf-8

Спустя 7 минут, 5 секунд (29.09.2012 - 22:02) killer8080 написал(а):
Цитата (h234 @ 29.09.2012 - 21:54)
Ну, все прекрасно отработало!
Кодировка utf-8


А у меня нет, и на большинстве хостингов то же не будет работать.

Кстати, на чем проверял?

Спустя 2 минуты, 30 секунд (29.09.2012 - 22:04) Игорь_Vasinsky написал(а):
u - поможет.

Спустя 2 минуты, 3 секунды (29.09.2012 - 22:06) killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 29.09.2012 - 22:04)
u - поможет.


нет, оно здесь ни причем
http://www.php.net/manual/en/reference.pcr...yntax.php#54830

Спустя 1 минута, 49 секунд (29.09.2012 - 22:08) Игорь_Vasinsky написал(а):
незнай. при правильной кодировке файла, заголовке. нухной кодировке вх. данный - работает.

Спустя 3 минуты, 50 секунд (29.09.2012 - 22:12) Snake22 написал(а):
блин,однако да в новой версии php кажется работает u а в старой нет. покрайней мере на локальном серве все норм, а на сайте, старый пых, и там тока с английскими буквами заменяет

Спустя 1 минута, 33 секунды (29.09.2012 - 22:13) Игорь_Vasinsky написал(а):
u -тут не причём. он вместе с функцией появился)

Спустя 1 минута, 23 секунды (29.09.2012 - 22:15) killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 29.09.2012 - 22:08)
незнай. при правильной кодировке файла, заголовке. нухной кодировке вх. данный - работает.

ни в кодировке дело.
Версия php какая? У меня 5.3.3 под дебианом не работает, так же не работало и в денвере 5.2.x
Вот еще цитата из мана
http://ua2.php.net/manual/ru/regexp.refere...cape.php#102868
Цитата
Beware that \b may not necessarily be Unicode aware:

<?php
echo preg_replace('/\\b/u', '#', 'gonzález');
?>

... prints "#gonzález#" or "#gonz#á#lez#" depending on the platform. (It appears to work as expected in latest PHP versions.)

Спустя 57 секунд (29.09.2012 - 22:16) killer8080 написал(а):
Цитата (Snake22 @ 29.09.2012 - 22:12)
а на сайте, старый пых, и там тока с английскими буквами заменяет

для обхода этих граблей. можно использовать "утверждения"

Спустя 1 минута, 46 секунд (29.09.2012 - 22:17) Игорь_Vasinsky написал(а):
а.. может. не спорю. влом версию ща глядеть.
оф. баг? а чё не фиксят?

Спустя 3 минуты, 44 секунды (29.09.2012 - 22:21) killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 29.09.2012 - 22:17)
оф. баг? а чё не фиксят?


Ну раз у кого то работает, наверно все таки фиксят, потому я и хотел узнать версию пыха, где работает user posted image

Snake22
держи универсальный вариант
$str = preg_replace('#(?<!\S)да(?!\S)#iu','нет','ДА куда да-да вода да');

Спустя 3 минуты, 31 секунда (29.09.2012 - 22:25) h234 написал(а):
Да уж, точно!
Проверил на 4 хостингах. Нигде не отработал корректно, кроме локального компа с Денвером 3 (php 5.3.13)

Спустя 16 секунд (29.09.2012 - 22:25) Snake22 написал(а):
во спасибо большое.
теперь всё точно работает laugh.gif

Спустя 3 минуты, 48 секунд (29.09.2012 - 22:29) killer8080 написал(а):
h234
когда то где то читал, что это связано с опциями локали при компиляции PCRE, но в мануале подтверждения не нашел. Фиг его знает smile.gif


Спустя 50 минут, 43 секунды (29.09.2012 - 23:19) Zzepish написал(а):
h234
чуваааак, огромное спасибо) 100 лет искал \b

Спустя 7 дней, 20 часов, 26 минут, 12 секунд (7.10.2012 - 19:46) Snake22 написал(а):
Цитата (killer8080 @ 29.09.2012 - 22:21)
Цитата (Игорь_Vasinsky @ 29.09.2012 - 22:17)
оф. баг? а чё не фиксят?

Snake22
держи универсальный вариант
$str = preg_replace('#(?<!\S)да(?!\S)#iu','нет','ДА куда да-да вода да');

Нужна ваша помощь опять :o
такой косяк обнаружил. если перед заменяемым словом стоит "ентер" то слово почему то не заменяется.
то есть
вот если такого вида текст
[enter] //тут типа пустая строка,нажат ентр
[enter] // тут тоже
СЛОВО

то не заменится

Спустя 7 минут, 39 секунд (7.10.2012 - 19:53) Snake22 написал(а):
а ошибся. отбой.
прост у мя скриптик перед отправкой заменяет перевод каретки на <br> и там получается сливается <br>со словом,пробел добавил и всё ок.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.