Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 14:24   #1
sergeiqwe
Пользователь
 
Регистрация: 29.04.2010
Сообщений: 31
По умолчанию регулярные выражения и массив

добрый день

Есть простая замена слов в цыкле но возникла проблема при замене заменяет оно к примеру "столешница" на "100лешница" не по совпадению слов а по совпадению символов как исправить чтобы если слово "сто" то замена делалась на 100 а если слова столешница пропускалась?


for ($i = 0; $i < count($ffff[1]); $i++)

{



$buffett = str_replace($ffff[1][$i], "<b>".$ffff[2][$i]."</b>", $buffett);


}
sergeiqwe вне форума Ответить с цитированием
Старый 01.06.2010, 19:19   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Может, не совсем правильно понял из-за того, что написано не понятно, но, может, так:
if ($buffett=="столешница") continue;
Аналогично можно дописать условие и на if (...="сто") и т.п.
motorway вне форума Ответить с цитированием
Старый 01.06.2010, 20:01   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Не уверен, что вариант наилучший, но можно попробовать разбить текст на слова и занести каждое слово в массив с помощью функции explode(). После этого циклом пройтись по массиву и с помощью функции preg_replace() уже что то менять. Потом восстанавливаешь текст функцией implode().
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 01.06.2010, 22:23   #4
sergeiqwe
Пользователь
 
Регистрация: 29.04.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Linel Посмотреть сообщение
Не уверен, что вариант наилучший, но можно попробовать разбить текст на слова и занести каждое слово в массив с помощью функции explode(). После этого циклом пройтись по массиву и с помощью функции preg_replace() уже что то менять. Потом восстанавливаешь текст функцией implode().
В масиве $ffff[1][$i] больше 60000 слов и словосочетаний ваш вариант нереален
sergeiqwe вне форума Ответить с цитированием
Старый 01.06.2010, 23:02   #5
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

юзайте preg_replace
SkyM@n вне форума Ответить с цитированием
Старый 01.06.2010, 23:08   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Во-первых, зачем сделан цикл? $ffff[1][$i] - тоже массив? Или строка?
Читаем внимательно мануал, "о боже", функция str_replace прекрасно работает с массивами. При чём гораздо быстрее чем ваше for ($i = 0; $i < count($ffff[1]); $i++).

Во-вторых, в вашем случае прийдётся использовать preg_replace, так как вам нужно искать целые слова, без пробелов и знаков препинания.

Да, кстати, preg_replace также отлично работает с массивами. Только нужно не забывать, что там нужно подставлять шаблон.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения Syltan JavaScript, Ajax 3 24.04.2010 23:08
Регулярные выражения adwaer Общие вопросы .NET 4 24.02.2010 17:38
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44