Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Обработка строки preg_replace

Ответить
Настройки темы
Обработка строки preg_replace

Ветеран


Сообщения: 575
Благодарности: 8


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: venuko
Дата: 28-01-2009
PHP код: Выделить весь код

$words=array('World','пять и два','государств','Семь');

$open_tags=array('<a href="ssilka1">','<a href="ssilka2">','<a href="ssilka3">','<a href="ssilka4">');
$close_tags=array('</a>','</a>','</a>','</a>');

function 
highlight_first($text$words$open_tags$close_tags) {
    
$arReplace = array();
    for(
$i=0$i<count($words); $i++) {
        
//$words[$i] = '/('.preg_quote($words[$i]).')/iu';
        
$words[$i] = "/\b(".preg_quote($words[$i]).")\b/";
        
//$words[$i] = "/(?<![a-z0-9а-я])(".preg_quote($words[$i]).")(?![a-z0-9а-я])/iu";
        
$arReplace[]=  $open_tags[$i]. '\1'$close_tags[$i];
    }
    
$text =    preg_replace($words$arReplace$text1);
    return 
$text;
}

$text "Семь и ещё world World семь Буквы world разные и т.д. пять и два потом World Пять и два государственный. Семь государств и Шесть паШесть";
$text=highlight_first($text,$words,$open_tags,$close_tags);

echo 
$text

Результат работы скрипты такой: <a href="ssilka4">Семь</a> и ещё world <a href="ssilka1">World</a> семь Буквы world разные и т.д. <a href="ssilka2">пять и два</a> потом World Пять и два государственный. Семь <a href="ssilka3">государств</a> и Шесть паШесть

А должен быть: Результат работы скрипты такой: <a href="ssilka4">Семь</a> и ещё <a href="ssilka1">world</a> World семь Буквы world разные и т.д. <a href="ssilka2">пять и два</a> потом World Пять и два государственный. Семь <a href="ssilka3">государств</a> и Шесть паШесть


Т.е. скрипт в тексте оборчивает нужными тегами самые первые вхождения слов (повторения не оборачивает), слова для оборачивания в массиве, также теги. Проблема в том что что-то с регистром, т.е. слово World обернулось, а должно было world с маленькой буквы, так как оно первое вхождение. Подскажите в чем проблема, плиз?

Отправлено: 19:18, 28-01-2009

 

Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


лучше установите локаль только для строковых функций... вставьте строку до обработки текста...
PHP код: Выделить весь код

// для функций обработки строк, для кириллицы 1251

// название локали может быть разным, в зависимости от системы

@setlocale(LC_CTYPE'ru_RU.CP1251'); 


Отправлено: 11:40, 29-01-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 575
Благодарности: 8

Профиль | Отправить PM | Цитировать


хм, когда через CMS добавляю текст и словосочетания то они выделяются, а экспоритровал другую базу, и в ней не выделяются слова, что-то с кодировкой?

Отправлено: 13:45, 29-01-2009 | #12


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

$i=1;

do {
    
$comments['message'] = str_replace(":smile".$i.":""<img src='/smiles/s".$i.".png' alt='' />"$comments['message']);
    
$i++;
} while(
$i<21); 

Можно это как то тоже оптимизировать методом preg_replace ?

Типа так?
PHP код: Выделить весь код

$t preg_replace("~:smile([0-9]*):~""<img src=\"/smiles/$1\.png\" />"$t); 


-------
Мой блог Web Development


Последний раз редактировалось Artem-Samsung, 11-02-2010 в 21:14.


Отправлено: 20:06, 11-02-2010 | #13


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


str_replace быстрее будет, но это требует проверки времени выполнения. Сделайте два варианта, и проверьте время выполнения, выберите тот, где быстрее.

в строке замены экранировать не нужно (кроме кавычек), там не регулярное выражение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:33, 11-02-2010 | #14


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

$list['content']    = stripslashes(preg_replace("~:smile([0-9]*):~""<img src=\"/smiles/s$1\.png\" />"$comments['message'])); 


Да, так работает
А вот подскажите пожалуйста, как проверить скорость выполнения?
Я не думаю, что это на столько важно. Там текста немного. А вот записывается в одну строчку акуратней) но спасибо, буду знать)

-------
Мой блог Web Development


Отправлено: 23:37, 11-02-2010 | #15


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата Artem-Samsung:
stripslashes( »
это зачем?
Цитата Artem-Samsung:
s$1\.png »
экран уберите тут.
Цитата Artem-Samsung:
как проверить скорость выполнения? »
с помощью microtime - ставите в коде метки в начале и конце, и вычисляете разницу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:49, 11-02-2010 | #16



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Обработка строки preg_replace

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Автозамена строки из другой строки - trigger? procedure ? BugZZ Программирование и базы данных 0 18-09-2009 09:51
Обработка формы ][alter Вебмастеру 10 18-12-2007 00:18
Обработка видео Antonij Видео и аудио: обработка и кодирование 14 29-03-2007 21:44
Обработка лог-файла на C++ Guest Программирование и базы данных 17 23-03-2004 01:11
обработка и отправка форм MXM Вебмастеру 3 29-01-2004 19:18




 
Переход