Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Головоломка с str_replace (http://forum.oszone.net/showthread.php?t=128971)

venuko 17-01-2009 20:18 1010827

Головоломка с str_replace
 
Люди добрые подскажите, плиз, синтаксис php, а то я убьюсь :(

Во что есть:

PHP код:

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

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

echo 
"$text"

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

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

Igor_I 17-01-2009 20:42 1010855

PHP код:

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

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

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

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

echo 
"$text"

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

venuko 17-01-2009 20:51 1010867

Цитата:

Цитата 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. Так вот как в первый и второй массив соотвественно подгрузить данные из их столбцев?

venuko 17-01-2009 21:29 1010907

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

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

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

Igor_I 17-01-2009 22:27 1010977

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"


venuko 18-01-2009 09:38 1011256

Цитата:

Цитата 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";
------- »


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

Igor_I 18-01-2009 14:21 1011430

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

Igor_I 18-01-2009 14:44 1011456

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

Coutty 18-01-2009 14:53 1011461

Цитата:

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

Добавьте по краям искомого слова пробелы.

Sham 18-01-2009 19:42 1011765

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


Igor_I 18-01-2009 19:57 1011790

Sham, не знаю как у других, у меня не работает.
Получается такая строка
HTML код:

Лейкоз очень у даже опережает рак. Рак в раковая опухоль и т.д.
Лейкозные и потом опять <strong>лейкоз</strong>

Не люблю регулярки :)

Sham 18-01-2009 20:28 1011827

Igor_I, там железно все, все работает как надо
HTML код:

<strong>Лейкоз</strong> очень у даже опережает рак. <strong>Рак</strong> в раковая опухоль и т.д. Лейкозные и потом опять лейкоз
p.s. первый "рак" не попал, потому что точка в конце (можно в шаблон добавить)

Igor_I 18-01-2009 20:37 1011838

Sham, версия PHP и PCRE?

venuko 18-01-2009 20:44 1011849

ребята а если словосочетания к примеру нужно будет выделить, например "Раковая опухоль"?

Sham 18-01-2009 21:22 1011881

Цитата:

Цитата Igor_I
версия PHP и PCRE? »

это не важно, мб с кодировкой не то (с setlocale дб нормально)...
Цитата:

Цитата venuko
если словосочетания к примеру нужно будет выделить »

хоть предложение, только пробелы тоже в счет (либо пробелы нужно заменять на модификатор \s+ чтобы учитывал пробельные символы, включая табуляцию, перенос строки и тд)...


Время: 14:32.

Время: 14:32.
© OSzone.net 2001-