Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: подсветка поиска с морфологией
 
 автор: dirol   (09.12.2010 в 09:45)   письмо автору
 
 

взял от сюда поиск с морфологией

функция подсветки работает только на нижний регистр. а если слово с заглавной буквы то не срабатывает выделение слова. вот функция подсветки

function Highlight($whereText, $whatText=null){
    global $allforms_arr;
    $highlightWords = $highlightWordsRepl = array();
    $highlightWordsT = $allforms_arr;
    foreach ( $highlightWordsT as $k => $v )


        if ( !$v ){
            $newk=ChangeRegistre($k,"L");
            $highlightWords[]  = "#($newk)#";
            $highlightWordsRepl[] = '[highlight]\\1[/highlight]';
        }
        else
            foreach ( $v as $v1 ){
                $newv=ChangeRegistre($v1,"L");
                $highlightWords[]  = "#($newv)#";
                $highlightWordsRepl[] = '[highlight]<b>\\1</b>[/highlight]';
            }

    return $message['message_text'] = preg_replace(array_reverse($highlightWords), '<strong>$1</strong>', $whereText);
}



function ChangeRegistre ($str="",$registre) {
  $re_ar= array("а"=>"А", "б"=>"Б", "в"=>"В", "г"=>"Г","д"=>"Д", "е"=>"Е", "ё"=>"Е", "Ё"=>"Е", "ж"=>"Ж", 
"з"=>"З", "и"=>"И", "й"=>"Й", "к"=>"К", "л"=>"Л", "м"=>"М", "н"=>"Н", "о"=>"О", "п"=>"П", "р"=>"Р", 
"с"=>"С", "т"=>"Т", "у"=>"У", "ф"=>"Ф", "х"=>"Х", "ц"=>"Ц", "ч"=>"Ч", "ш"=>"Ш", "щ"=>"Щ", "ъ"=>"Ъ", "ы"=>"Ы", "ь"=>"Ь", "э"=>"Э", "ю"=>"Ю", "я"=>"Я");
  if ($registre=="U") {
    foreach ($re_ar as $key=>$val) $str = preg_replace ("/{$key}/", "{$val}", $str); }
  else if ($registre=="L") {
      foreach ($re_ar as $key=>$val) $str = preg_replace ("/{$val}/", "{$key}", $str);
  }
  return $str;
}

function IsKirillic ($str="") {
  $re_ar= array("а"=>"А", "б"=>"Б", "в"=>"В", "г"=>"Г","д"=>"Д", "е"=>"Е", "ё"=>"Е", "Ё"=>"Е", "ж"=>"Ж",
 "з"=>"З", "и"=>"И", "й"=>"Й", "к"=>"К", "л"=>"Л", "м"=>"М", "н"=>"Н", "о"=>"О", "п"=>"П", "р"=>"Р", 
"с"=>"С", "т"=>"Т", "у"=>"У", "ф"=>"Ф", "х"=>"Х", "ц"=>"Ц", "ч"=>"Ч", "ш"=>"Ш", "щ"=>"Щ", "ъ"=>"Ъ", "ы"=>"Ы", "ь"=>"Ь", "э"=>"Э", "ю"=>"Ю", "я"=>"Я");
   foreach ($re_ar as $key=>$val) {
      if (preg_match ("/{$key}/",$str) || preg_match ("/{$val}/",$str)) {
        return true;
        break;
      }
   }
  return false;
}

  Ответить  
 
 автор: mihdan   (09.12.2010 в 18:53)   письмо автору
 
   для: dirol   (09.12.2010 в 09:45)
 

Используйте модификатор i в регулярках.

  Ответить  
 
 автор: kosta_in_net   (12.12.2010 в 10:24)   письмо автору
 
   для: dirol   (09.12.2010 в 09:45)
 

кроме модификатора может потребоваться установка локали. типа
@ setlocale( LC_ALL, array( 'ru_RU.CP1251', 'rus_RUS.1251' ) );
Но лично мне непонятна функция посдветки. Я так подсвечиваю:

$search=array(
"'[\r|\n|\t]'",// табуляторы, новые строки и т. д.
"'\s{2,}'"// множественные пробелы
);
$replace=array(
' ',// вместо новой строки и табуляции
' '// единичный пробел
);
$patern=preg_replace($search,$replace,trim($zapros));
$text=preg_replace("/[а-яА-Яa-zA-Z\-]*(".$patern.")[а-яА-Яa-zA-Z\-]*/i", "<b>\\0</b>", $text);


Шаблон [а-яА-Яa-zA-Z\-]* конечно, можно усовершенствовать.

  Ответить  
 
 автор: neadekvat   (12.12.2010 в 12:54)   письмо автору
 
   для: kosta_in_net   (12.12.2010 в 10:24)
 

Ужасно. Я бы советовал такое не советовать.

> Шаблон [а-яА-Яa-zA-Z\-]* конечно, можно усовершенствовать.
А зачем он вообще там нужен?
И к чему там конкатенации лишние - в двойных кавычках переменные очень даже хорошо работают.
И "шаблон" пишется pattern, кстати сказать.

А про первые строки:
preg_replace('/[\t\s]+/s', ' ', $text);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования