Подсветка тегов в тексте, но без учета регистра!

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

Статус темы:
Закрыта.
Модераторы: xpert13
  1. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Я чего-то не понимаю, или чего-то не так делаю?

    Ни это:

    PHP:
    $zagolovok eregi_replace($t1,"<strong>\\0</strong>",$zagolovok);
    Ни это:
    PHP:
    $zagolovok preg_replace("/(".$t1.")/si","<strong>\\1</strong>",$zagolovok);
    не дает мне замену без учета регистра русских букв. Нужно в $zagolovok поменять все $t1 на <strong>$t1</strong> но при условии что и в $t1 и в $zagolovok неизвестно какой регистр.
     
  2. black.cat

    black.cat

    Регистр.:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    32
    попробуйте:
    PHP:
    $zagolovok preg_replace("/(".$t1.")/is","<strong>$1</strong>",$zagolovok);  
     
  3. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Нет, тоже не помогает, как я понимаю, проблема в том, что и в строке которую ищем, и в которой ищем, может быть разный регистр.
    Попытка перевести строку в нижний ничего не дала, она просто не переводится, строка, средствами strtolower. Видимо локаль не та :) Могут быть еще какие-то варианты?

    не предлагать, тоже не хочет работать.
     
  4. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Раз strtolower не меняет регистр русского текста, значит правильно, локаль не та. В примере black.cat рабочий, за исключением строк с символами, являющимися мета символами регулярок. Их надо экранировать:
    Код:
    $zagolovok = preg_replace('/'.preg_quote($t1,'/').'/is','<strong>$0</strong>',$zagolovok); 
    
     
    Construktor и virtualbrest нравится это.
  5. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Понятно, буду думать на счет локали, так как на простейшем задании споткнулся, а рыть надо было не в том месте, оказывается. Ваш пример все так же ничего мне не дает.

    Тааак..
    Заработало после того, как добавил перед регуляркой:

    И дальше нормально выводит русские буквы. Всем спасибо, заработало!
     
    Construktor нравится это.
  6. Construktor

    Construktor Постоялец

    Регистр.:
    28 янв 2008
    Сообщения:
    139
    Симпатии:
    20
    Так выделяются не только отдельные слова, но и части слова. Как сделать, чтобы тегами <strong> выделялись только отдельные слова (либо с двух сторон пробелы либо справа не пробел а знак препинания)?
     
  7. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Construktor
    Код:
    $zagolovok = preg_replace('/\b'.preg_quote($t1,'/').'\b/is','<strong>$0</strong>',$zagolovok);
    
     
    Construktor нравится это.
Статус темы:
Закрыта.