За последние 24 часа нас посетили 17744 программиста и 1612 роботов. Сейчас ищут 1427 программистов ...

Подсветка найденых слов

Тема в разделе "Решения, алгоритмы", создана пользователем antonn, 8 янв 2008.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Чей то не нашел более менее правильного решения, и так же натолкнувший на подобный вопрос в другом форуме накропал свой. Требовалось "подсветить" найденые слова в HTML.

    Код (Text):
    1. $text="text text1 text3 text <b>text</b> text3 <span> text <a href='text'>text</a> text</span> text4 <a href='text' > text </a>";
    2.  
    3. $find_text="text";
    4. $find_text_rep_open="[megateg]";
    5. $find_text_rep_close="[/megateg]";
    6.  
    7. $find_text=preg_quote($find_text);
    8.  
    9. $text2=preg_replace( "#(\<([/]*)(.+?)[^>]*\>)([ ]*)(".$find_text.")([ ]*)(\<([/]*)(.+?)[^>]*\>)#is","\\1\\4".$find_text_rep_open."\\5".$find_text_rep_close."\\6\\7",$text );
    10. $text2=preg_replace( "#(?!".preg_quote($find_text_rep_open).")(^|[ ])(".$find_text.")($|[ ])(?!".preg_quote($find_text_rep_close).")#is","\\1".$find_text_rep_open."\\2".$find_text_rep_close."\\3",$text2 );
    11.    
    12.    $text2=str_replace($find_text_rep_open, '<font style="background:yellow">', $text2);
    13.    $text2=str_replace($find_text_rep_close, '</font>', $text2);
    14.  
    15. echo "<br><br><br>".$text."<br>\n".$text2;
    16.  
    17.    $text=str_replace('<', '& lt;', $text);
    18.    $text2=str_replace('<', '& lt;', $text2);
    19.  
    20. echo "<br><br><pre>".$text."<br>\n".$text2."</pre>";
    Вроде бы работает регулярка, подствечивает слова вне тегов (т.е. ссылки не убъет:) ) Поповоду ее правильности жду комментов. По поводу оптимизированности кода - сам знаю %))

    ЗЫ юбилейный, 11 битовый топик %))
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    PHP:
    1. <?
    2. $text="<b>text</b> waka";
    3. $find_text="text waka";
    // не найдено
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    preg_replace( '/>[^>]*(' + preg_quote( $word ) + ')[^<]</', '<strong>$1</strong>', $str );
     
  4. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Ti, эт ты многого хочешь, чтобы ещё и фразы подсчечивала.. :)
     
  5. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    dark-demon
    каков вопрос...
     
  6. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    вопрос про найденые слова, а не найденые фразы :)
     
  7. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    говно вопрос))
    PHP:
    1. <?
    2. $text="<b>te</b>xt waka";
    3. $find_text="text";
    // не найдено
     
  8. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    негодяй))))))
     
  9. Clone

    Clone Guest

    Как насчёт резать все теги(выделять текст из кода) перед анализом? Выводить текст с форматированием, отличным от выделения найденых слов - вводить в заблуждение юзера, имхо.
     
  10. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    регулярку не читал ибо напомнила недавний пост про e-mail, где регуляка была со страницу, ибо уверен на 98,76% что тут нужна логика, аля автомат, одними регуляками не обойтись.
     
  11. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Clone
    а если нужно страницу показать юзеру? а найденые слова специально выделить и раскрасить в красный шрифт на желтом фоне. Яндексы этим не брузгуют, и правильно делают. Причем, если уж ввозить юзера в заблюждение, так это удалив все теги, всякие таблицы будут смотреться просто замечательно)))