Показать полную графическую версию : Головоломка с str_replace
Люди добрые подскажите, плиз, синтаксис php, а то я убьюсь :(
Во что есть:
$out=array("лейкоз","рак");
$from=array("<b>лейкоз</b>","<b>рак</b>");
$text = "лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д. Лейкозные и потом опять лейкоз";
$text = str_replace($out,$from,$text);
echo "$text";
Это скрипт выделяет слова тегами <b>, которые я указал в массиве, в чем проблема: Как выделить именно одиночное слово "рак" и "лейкоз" и т.д., в склонениях эту часть одиночного слова не нужно чтобы оно выделялось (это щас происходит, пример "раковая"), и выделялись только первые найденые слова по тексту увиденные скриптом, дальше по тексту выделять слова эти же самые не нужно (слов повторений и их склонений может быть n-количесто)?
Спасибо всем за помощь, я начинающий и поэтому хотел бы увидеть хороший пример, буду очень сильно благодарен!
$out =array ("/лейкоз/","/рак/");
$from =array ("<b>лейкоз</b>","<b>рак</b>");
$text = "лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д. Лейкозные и потом опять лейкоз";
$text = preg_replace($out,$from,$text,1);
echo "$text";
Хотя насчет массивов можно сообразить что-либо другое.
PHP код:
$out =array ("/лейкоз/","/рак/");
$from =array ("<b>лейкоз</b>","<b>рак</b>");
$text = "лейкоз очень опасная болезнь, она по дамагу даже опережает рак. Рак в свою очередь уже лечиться, раковая опухоль и т.д. Лейкозные и потом опять лейкоз";
$text = preg_replace($out,$from,$text,1);
echo "$text";
Хотя насчет массивов можно сообразить что-либо другое. »
Спасибо за помощь, но вот засада, у меня слова и их стили хранятся в БД MySQL, три столбца, первый id поля, поле slovo, поле new_slovo. Так вот как в первый и второй массив соотвественно подгрузить данные из их столбцев?
$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;
Только здесь регистро зависимосимость, первое слово в предложение, а именно Лейкоз не выделяется, выделяется следующие в конце, которое с маленькой буквы.
Как убить регистро зависимость?
C одной стороны, регистронезависимость что-то не получается, с другой стороны она и не нужна, потому как слово Лейкоз будешь менять на слово Лейкоз, опять же с большой буквы.
Спасибо за помощь, но вот засада, у меня слова и их стили хранятся в БД MySQL, три столбца, первый id поля, поле slovo, поле new_slovo. Так вот как в первый и второй массив соотвественно подгрузить данные из их столбцев? »
http://ru2.php.net/manual/ru/function.mysql-query.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";
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";
------- »
Слова не одиночные выделяются, выделяется ещё часть в склонениях :(
Что-то с русским языком нечего не получается. В английском есть регистронезависимость, в русском (UTF-8) - нет.
Поищи - http://ru2.php.net/manual/ru/function.str-ireplace.php, может что подойдет.
http://phpclub.ru/talk/showthread.php?threadid=110227 - покопайся.
Слова не одиночные выделяются, выделяется ещё часть в склонениях »
Добавьте по краям искомого слова пробелы.
rtm по шаблонам...
$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, $text, 1);
echo $text;
Sham, не знаю как у других, у меня не работает.
Получается такая строка
Лейкоз очень у даже опережает рак. Рак в раковая опухоль и т.д.
Лейкозные и потом опять <strong>лейкоз</strong>
Не люблю регулярки :)
Igor_I, там железно все, все работает как надо
<strong>Лейкоз</strong> очень у даже опережает рак. <strong>Рак</strong> в раковая опухоль и т.д. Лейкозные и потом опять лейкоз
p.s. первый "рак" не попал, потому что точка в конце (можно в шаблон добавить)
ребята а если словосочетания к примеру нужно будет выделить, например "Раковая опухоль"?
версия PHP и PCRE? »
это не важно, мб с кодировкой не то (с setlocale дб нормально)...если словосочетания к примеру нужно будет выделить »
хоть предложение, только пробелы тоже в счет (либо пробелы нужно заменять на модификатор \s+ чтобы учитывал пробельные символы, включая табуляцию, перенос строки и тд)...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.