За последние 24 часа нас посетил 18151 программист и 1652 робота. Сейчас ищут 1637 программистов ...

Регистронезависимое регулярное выражение.

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

  1. free

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

    С нами с:
    7 дек 2006
    Сообщения:
    29
    Симпатии:
    0
    Здравствуйте.
    Пытаюсь сделать подсветку слов в тексте:
    PHP:
    1.  
    2. <?php
    3. $text = preg_replace('/([^\s]?'.preg_quote($keyword,'/').')([$\s\,\.\!\-\?\;\:])/Ui','<b>$1</b>$2', $text);
    4.  
    $keyword – слово которое нужно подсветить
    $title – текст в котором его ищем.
    Если $keyword и слово в тексте написано в одном регистре, то все работает. Если же не слово в тексте,
    например, начинается с заглавной буквы, то оно не будет подсвечено. Регистронезависимость планировал
    обеспечить модификатором "i", но не выходит..
    В чем может быть проблема?
     
  2. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Может попробовать еще модификатор u?
     
  3. free

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

    С нами с:
    7 дек 2006
    Сообщения:
    29
    Симпатии:
    0
    Строки у меня в кодировке cp1251, предварительно в нее перекодированы.
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. $text = 'Привет, МИР! Тра та та и тарам пам пам.';
    3. $keyword = 'та';
    4. print preg_replace('/' . preg_quote($keyword, '/') . '/is', '<strong>$0</strong>', $text);
     
  5. free

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

    С нами с:
    7 дек 2006
    Сообщения:
    29
    Симпатии:
    0
    Sergey89, если изменить
    PHP:
    1. $text = 'Привет, МИР! Тра Та та и тарам пам пам.';
    ,
    То певрое "Та" не будет подсвечено. А мне нужно чтобы было.
     
  6. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Действительно, если используется кириллица то так и будет.

    На localhost проверял, кодировка UTF-8, добавлен модификатор u, работает при разном регистре.

    Если идей больше никаких нет, то предлагаю перекодировать строку в UTF-8 и там уже искать что нужно.
     
  7. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Только что проверил, всё подсвечивает.
     
  8. free

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

    С нами с:
    7 дек 2006
    Сообщения:
    29
    Симпатии:
    0
    topas, в UTF было бы перекодировать удобно, но, к сожалению. нельзя.
    Ладно, всем спасибо, остановлюсь на strtolower()