Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Головоломка с str_replace

Ответить
Настройки темы
Головоломка с str_replace

Ветеран


Сообщения: 573
Благодарности: 8


Конфигурация

Профиль | Отправить PM | Цитировать


Люди добрые подскажите, плиз, синтаксис php, а то я убьюсь

Во что есть:

PHP код: Выделить весь код

$out=array("лейкоз","рак");

$from=array("<b>лейкоз</b>","<b>рак</b>");
$text "лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д.  Лейкозные и потом опять лейкоз";

$text str_replace($out,$from,$text);

echo 
"$text"

Это скрипт выделяет слова тегами <b>, которые я указал в массиве, в чем проблема: Как выделить именно одиночное слово "рак" и "лейкоз" и т.д., в склонениях эту часть одиночного слова не нужно чтобы оно выделялось (это щас происходит, пример "раковая"), и выделялись только первые найденые слова по тексту увиденные скриптом, дальше по тексту выделять слова эти же самые не нужно (слов повторений и их склонений может быть n-количесто)?

Спасибо всем за помощь, я начинающий и поэтому хотел бы увидеть хороший пример, буду очень сильно благодарен!

Отправлено: 20:18, 17-01-2009

 

Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

$out =array ("/лейкоз/","/рак/");


$from =array ("<b>лейкоз</b>","<b>рак</b>");

$text "лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д.  Лейкозные и потом опять лейкоз";

$text preg_replace($out,$from,$text,1);

echo 
"$text"

Хотя насчет массивов можно сообразить что-либо другое.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:42, 17-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 573
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Igor_I:
PHP код:
$out =array ("/лейкоз/","/рак/");
$from =array ("<b>лейкоз</b>","<b>рак</b>");
$text = "лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д. Лейкозные и потом опять лейкоз";
$text = preg_replace($out,$from,$text,1);
echo "$text";
Хотя насчет массивов можно сообразить что-либо другое. »
Спасибо за помощь, но вот засада, у меня слова и их стили хранятся в БД MySQL, три столбца, первый id поля, поле slovo, поле new_slovo. Так вот как в первый и второй массив соотвественно подгрузить данные из их столбцев?

Отправлено: 20:51, 17-01-2009 | #3


Ветеран


Сообщения: 573
Благодарности: 8

Профиль | Отправить PM | Цитировать


PHP код: Выделить весь код

$out=array("лейкоз","рак");

$out2=array("<b>лейкоз</b>","<b>рак</a>");
$text "Лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д.  Лейкозные и потом опять лейкоз";

for(
$i 0$i<sizeof($out); $i++)
{
  
$text substr_replace($text"<b>".$out2[$i]."</b>"strpos($text,$out[$i]), strlen($out[$i]));
}
echo 
$text

Только здесь регистро зависимосимость, первое слово в предложение, а именно Лейкоз не выделяется, выделяется следующие в конце, которое с маленькой буквы.

Как убить регистро зависимость?

Отправлено: 21:29, 17-01-2009 | #4


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


C одной стороны, регистронезависимость что-то не получается, с другой стороны она и не нужна, потому как слово Лейкоз будешь менять на слово Лейкоз, опять же с большой буквы.
Цитата venuko:
Спасибо за помощь, но вот засада, у меня слова и их стили хранятся в БД MySQL, три столбца, первый id поля, поле slovo, поле new_slovo. Так вот как в первый и второй массив соотвественно подгрузить данные из их столбцев? »
http://ru2.php.net/manual/ru/function.mysql-query.php
На мой взгляд такой скрипт будет получше.
PHP код: Выделить весь код

$slovo = array ("лейкоз","рак");


$out =array ("/$slovo[0]/","/$slovo[1]/");

$from =array ("<b>$slovo[0]</b>","<b>$slovo[1]</b>");

$text "Лейкоз очень у даже опережает рак. Рак в  раковая опухоль и т.д.  Лейкозные и потом опять лейкоз";

$text preg_replace($out,$from,$text);

echo 
"$text"

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 22:27, 17-01-2009 | #5


Ветеран


Сообщения: 573
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Igor_I:
C одной стороны, регистронезависимость что-то не получается, с другой стороны она и не нужна, потому как слово Лейкоз будешь менять на слово Лейкоз, опять же с большой буквы.
Цитата venuko:Спасибо за помощь, но вот засада, у меня слова и их стили хранятся в БД MySQL, три столбца, первый id поля, поле slovo, поле new_slovo. Так вот как в первый и второй массив соотвественно подгрузить данные из их столбцев? »
http://ru2.php.net/manual/ru/function.mysql-query.php
На мой взгляд такой скрипт будет получше.
PHP код:
$slovo = array ("лейкоз","рак");
$out =array ("/$slovo[0]/","/$slovo[1]/");
$from =array ("<b>$slovo[0]</b>","<b>$slovo[1]</b>");
$text = "Лейкоз очень у даже опережает рак. Рак в раковая опухоль и т.д. Лейкозные и потом опять лейкоз";
$text = preg_replace($out,$from,$text);
echo "$text";
------- »

Слова не одиночные выделяются, выделяется ещё часть в склонениях

Отправлено: 09:38, 18-01-2009 | #6


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


Что-то с русским языком нечего не получается. В английском есть регистронезависимость, в русском (UTF-8) - нет.
Поищи - http://ru2.php.net/manual/ru/function.str-ireplace.php, может что подойдет.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 14:21, 18-01-2009 | #7


Ветеран


Сообщения: 1862
Благодарности: 132

Профиль | Сайт | Отправить PM | Цитировать


http://phpclub.ru/talk/showthread.php?threadid=110227 - покопайся.

-------
ДИЛЕТАНТ - это курьезный человек, который испытывает удовольствие делать то, чего не умеет.
AMD 4200+, MSI Neo2Platinum, 2Gb, ATI 9600, D-Link DWL-G510, FreeBSD 8.0, KDE 4.3.4


Отправлено: 14:44, 18-01-2009 | #8


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Цитата venuko:
Слова не одиночные выделяются, выделяется ещё часть в склонениях »
Добавьте по краям искомого слова пробелы.

Отправлено: 14:53, 18-01-2009 | #9


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


rtm по шаблонам...
PHP код: Выделить весь код

$slovo = array ('лейкоз''рак');


$out = array
(
    
'/(?<=\s|^)(' preg_quote($slovo[0]) . ')(?=\s|$)/i',
    
'/(?<=\s|^)(' preg_quote($slovo[1]) . ')(?=\s|$)/i'
);

$from '<strong>${1}</strong>';

$text 'Лейкоз очень у даже опережает рак. Рак в раковая опухоль и т.д. Лейкозные и потом опять лейкоз';

$text = @preg_replace($out$from$text1);

echo 
$text


Отправлено: 19:42, 18-01-2009 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Головоломка с str_replace

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход