Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заменить текст ОДИН раз, при обработке массива 
V
    Опции темы
Wolf1994
Дата 20.6.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Пожалуйста, помогите решить вопрос.

Допустим есть массив строк, которые надо как-то выделить в тексте. При этом после выделения этот кусок текста не должен обрабатываться повторно. Мне эту задачу оказалось решить не по силам.

Вот к чему я пришёл:
Код

$t []="/([^x])(ops)([^x])/Usi";
$t []="/([^x])(ops)([^x])/Usi";
$s=" OPS OPS ";
$r=preg_replace ($t, "x$2x", $s);
print $r;

Поставил "[^x]" в качестве ограничителя замены, но при этом заменяется последовательность символов, соответсвующая "x" - в данном случае пробел, а если пробела нет, то замена и вовсе не срабатывает. 
PM MAIL WWW   Вверх
Mal Hack
Дата 20.6.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Вообще-то, повторный проход регулярки идет либо при специальном шаблоне (рекурсивном), либо при модификаторе e это можно организовать.
Покажи на наглядном примере из чего что ты хочешь получить и какая версия PHP. 
PM ICQ   Вверх
Wolf1994
Дата 20.6.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Версия PHP - 4.4.2.

Я хочу сделать множественную подсветку результатов поиска. То есть, есть массив. Он содержит полную строку поиска и отдельно каждую подстроку. Например:

Запрос: "Как пройти в библиотеку? Во"

Массив:
$a[0]="/Как пройти в библиотеку? Во/Usi";
$a[1]="/Как/Usi";
$a[2]="/пройти/Usi";
$a[3]="/в/Usi";
$a[4]="/библиотеку/Usi";
$a[5]="/Во/Usi";

Задача:
$text=preg_replace ($a, '<span class="hlight">$1</span>', $text);
-  сделать так, чтобы это выражение заменило каждый элемент массива только в одном проходе. Начиная с более длинных строк и заканчивая короткими. Для этого массив будет выстроен по длине строк. Проблема в том, что после замены в данном примере "Во" на "<span class="hlight">Во</span>", произойдёт ещё одна замена: "<span class="hlight"><span class="hlight">В</span>о</span>"  smile   

Это сообщение отредактировал(а) Wolf1994 - 20.6.2006, 23:48
PM MAIL WWW   Вверх
Mal Hack
Дата 20.6.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Думается мне, что так будет лучше...
Код

$a[0]="Как пройти в библиотеку? Во";
$a[1]="Как";
$a[2]="пройти";
$a[3]="в";
$a[4]="библиотеку";
$a[5]="Во";

$text = preg_replace( "#(" . implode( "|" , $a ) . ")#is" , "<span class=''hlight'>\\1</span>" , $text );
 
PM ICQ   Вверх
Wolf1994
Дата 21.6.2006, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 1
Всего: 29



Великолепно!!!

Спасибо. 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.2200 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.