За последние 24 часа нас посетили 17329 программистов и 1227 роботов. Сейчас ищут 1465 программистов ...

Найти текст и выделить его цветом

Тема в разделе "Регулярные выражения", создана пользователем pr0n1x, 21 ноя 2007.

  1. pr0n1x

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

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Здравствуйте.
    Помогите пожалуйста с регулярными выражениями.
    Эту задачу можно решить и без регулярный выражений но мне кажется что с их помощью будет легче.

    Задача такова:
    Мне нужно в тексте найти слово и выделить его например желтым цветом

    Например:
    Текст:
    This is the upgraded vendors account. Being a premier vendor gives you access to use all of the Premier Vendor tools.

    В этом тексте слово vendor встречается 3 раза (регистр букв не учитывается). И эти совпадения нужно выделить желтым цветом. Для этого нужно перед каждым началом слова vendor вставить <span style ="color:yellow;"> и как только слово заканчивается вставить </span>

    Результат должен быть таким:
    This is the upgraded vendors account. Being a premier vendor gives you access to use all of the Premier Vendor tools.
     
  2. +Sten+

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

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    PHP:
    1. <?php
    2. $str = "This is the upgraded vendors account. Being a premier vendor gives you access to use all of the Premier Vendor tools.";
    3. $word = "vendor";
    4. $str = str_replace($word, "<span style =\"color:yellow;\">$word</span>", $str);
    5. echo $str;
     
  3. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    +Sten+
    тут простыми заменами не обойтись.
     
  4. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    PHP:
    1. $b=preg_replace( "#(слово|vendor|неvendor)#i" , "<span style='color:#0000ff;'>\\1</span>" , $b );
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    PHP:
    1. <?php
    2. $text = 'This is the upgraded vendors account. Being a premier vendor gives you access to use all of the Premier Vendor tools.';
    3. $search = 'vendor';
    4. echo $test = preg_replace ('/[a-z]*(?:'.$search.')[a-z]*/si','<span style ="color:yellow;">$0</b></span>', $text);
    5. ?>
    хотя бы так.

    Интересно, что будет быстрее при регистронезависимой подсветке в больших объёмах текста, регулярки или разбор текста и str_replace? Никто не тестил?
     
  6. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    еще preg_quote() не забыть, чтобы не удивиться потом :)
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    antonn, зачем? Ему надо, вот пусть сам и заботится о входящих данных :twisted:
     
  8. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Luge
    ну, можно считать, что я ему и сказал :)
     
  9. pr0n1x

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

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    надо вот так

    PHP:
    1. preg_replace("/vendor/is", '<span class="highlighted">$0</span>', $text);
     
  10. simpson

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

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    simpson
    str_ireplace заменит «Vendor» на «vendor»