Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2012, 14:02   #1
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
Радость Выделение слова целиком (регулярные выражения)

Есть 2 строки:
PHP код:
$str1 "Какая-то красивая строка";
$str2 "строк"
С помощью регулярного выражения нахожу слово и выделяю его жирным цветом:
PHP код:
preg_replace ('/([\s]*[[:punct:]]*[\s]*)('$str2 .')([\s]*[[:punct:]]*[\s]*)/iu''\\1<b class="match">\\2</b>\\3'$str1 ); 
А как сделать, чтобы выделялось не '<b>строк</b>', а '<b>строка<b>' т.е. учитывать окончание?
Авторитет вне форума Ответить с цитированием
Старый 21.03.2012, 16:45   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Авторитет Посмотреть сообщение
А как сделать, чтобы выделялось не '<b>строк</b>', а '<b>строка<b>' т.е. учитывать окончание?
PHP код:
'/([\s]*[[:punct:]]*[\s]*)('$str2 .'[\w\-]*)([\s]*[[:punct:]]*[\s]*)/iu' 
Andkorol вне форума Ответить с цитированием
Старый 21.03.2012, 18:23   #3
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
По умолчанию

не работает
Авторитет вне форума Ответить с цитированием
Старый 21.03.2012, 18:57   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Авторитет Посмотреть сообщение
не работает
Все работает - я не имею привычки предлагать нерабочий код.
Код проверен - и работает.
PHP код:
$str1 "Какая-то красивая строка";
$str2 "строк";
echo 
preg_replace ('/([\s]*[[:punct:]]*[\s]*)('$str2 .'[\w\-]*)([\s]*[[:punct:]]*[\s]*)/iu''\\1<font color="red">\\2</font>\\3'$str1 ); 
Результат:
Изображения
Тип файла: png regexp.png (8.5 Кб, 138 просмотров)
Andkorol вне форума Ответить с цитированием
Старый 21.03.2012, 19:36   #5
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
По умолчанию

На локальном сервере работает, на удаленном - нет. Может нужно как-то поменять кодировку? Использую UTF-8


Последний раз редактировалось Авторитет; 21.03.2012 в 19:48. Причина: добавил фотки
Авторитет вне форума Ответить с цитированием
Старый 21.03.2012, 19:47   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Авторитет Посмотреть сообщение
На локальном сервере работает, на удаленном - нет. Может нужно как-то поменять кодировку? Использую UTF-8
Может и нужно - не могу знать.
То что вы пишете "Использую UTF-8" - не значит, что так оно и есть на самом деле
(имею ввиду кодировку самого файла со скриптом, кодировку страницы(.htaccess || header || meta), кодировку БД(если используете данные из базы) - факторов много, которые на это могут влиять).
Ваш начальный вариант из первого поста - тоже не работает на хостинге?
Andkorol вне форума Ответить с цитированием
Старый 21.03.2012, 19:54   #7
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
По умолчанию

Мой начальный вариант работает на удаленном сервере. Кодировка utf-8 прописана в meta. Пишу на Expression Web 4 - там Utf-8 стоит по-умолчанию. Если нужна ссылка примера - могу предоставить. В htaccess не разбираюсь
Авторитет вне форума Ответить с цитированием
Старый 21.03.2012, 20:08   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Авторитет Посмотреть сообщение
Мой начальный вариант работает на удаленном сервере.
[\w\-]* - это всё, что было добавлено в ваш начальный вариант кода.
А, ну и <font></font> - вместо <b></b>, для наглядности.

А если попробовать убрать модификатор u из выражения - на хостинге?
Meta - штука не надежная в таких вопросах...
Andkorol вне форума Ответить с цитированием
Старый 21.03.2012, 20:08   #9
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
По умолчанию

В общем, в конце preg_replace убрал букву u - заработало наполовину. Т.е.

Код:
highlightWords("Какая-то крвпвапасивая Строка", "вапас");
function highlightWords($string, $words) { 
 $str1 = $string;
$str2 = $words;
echo preg_replace ('/([\s]*[[:punct:]]*[\s]*)([\w\-]*'. $str2 .'[\w\-]*)([\s]*[[:punct:]]*[\s]*)/i', '\\1<font color="red">\\2</font>\\3', $str1 ); 
 //   return $string; 
}
Выводит Какая-то крвпвапасив��я Строка
Где 'крвпвапасив' с красным шрифтом.

На сервере установлен php 5.3. Неужели все еще utf-8 не юзабелен?

Последний раз редактировалось Авторитет; 21.03.2012 в 20:11.
Авторитет вне форума Ответить с цитированием
Старый 21.03.2012, 20:13   #10
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
По умолчанию

Извиняюсь, код выше запускался на локалке. На сервере пишет:
'Какая-то крвп<font color="red">вапас</font>ивая Строка'

Последний раз редактировалось Авторитет; 21.03.2012 в 20:16.
Авторитет вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
регулярные выражения Зод Общие вопросы Delphi 3 03.11.2011 11:18
Регулярные выражения ololo-schoolboy PHP 2 15.05.2011 13:03
Регулярные выражения DoGFoX Общие вопросы Delphi 1 03.02.2011 10:49
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44