|
|
|
| взял от сюда поиск с морфологией
функция подсветки работает только на нижний регистр. а если слово с заглавной буквы то не срабатывает выделение слова. вот функция подсветки
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;
}
|
| |
|
|
|
|
|
|
|
для: dirol
(09.12.2010 в 09:45)
| | Используйте модификатор i в регулярках. | |
|
|
|
|
|
|
|
для: 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\-]* конечно, можно усовершенствовать. | |
|
|
|
|
|
|
|
для: kosta_in_net
(12.12.2010 в 10:24)
| | Ужасно. Я бы советовал такое не советовать.
> Шаблон [а-яА-Яa-zA-Z\-]* конечно, можно усовершенствовать.
А зачем он вообще там нужен?
И к чему там конкатенации лишние - в двойных кавычках переменные очень даже хорошо работают.
И "шаблон" пишется pattern, кстати сказать.
А про первые строки:
preg_replace('/[\t\s]+/s', ' ', $text);
|
| |
|
|
|
|