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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что-то я никак не могу понять, замена preg_replace... 
:(
    Опции темы
-=Ustas=-
Дата 9.9.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 6
Всего: 69



Здрасте!
Прошу не ругать, я с ними (регами) еще не очень подружился, вот, пытаюсь.
Значит есть такой дескриптор в переменной:
[ URL=http://\"http://www.site.ru/test_link.html\"]Тестовая ссылка[/URL ]
Заменяю его так:
Код

$text = preg_replace("/ *\[url=\"(.*)\"\](.*)\[\/url\] */i", "<a href=\"\\1\">\\2</a>", $text);

- этот заменяется замечательно. А есть вот такой [img=\"pic\image.gif\"], заменяю его почти идентично, за исключением закрывающего дескриптора:
Код

$text = preg_replace("/ *\[img=\"(.*)\"\] */i", "<img src=\"\\1\">", $text);

Так он, после нахождения первого вхождения загребает в себя весь остальной текст, в том числе и [url=...] и [hr] и вообще всё, что дальше идет, как если бы не стояло в конце закрывающей - ]. Следовательно замена потом не работает.
Если же я инвертирую "жадность" модификатором U, то тогда нормально, но ведь в первом, где [url=]...[/url] без этого модификатора всё нормально пашет. Ничего не понимаю!!! smile Объясните, если это не составит труда.
Заранее пасибки!

Это сообщение отредактировал(а) -=Ustas=- - 9.9.2005, 10:31


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
AriX
Дата 9.9.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



-=Ustas=-
Не претендую на правильность, но по-моему и первый регэксп у тебя неправильный smile

Щас примерно объясню

Первый регэксп
Код
(.*)\[\/url\]

.* забирает сначала все, потом отдает по одному символу, до того момента, когда совпадет \[\/url\]
Если у тебя в тексте всего одна [ url ], то все будет нормально, если после этого есть еще [ url ], то конечная часть регэкспа (\[\/url\]) совпадет с закрывающимся тегом у второго [ url ]

Второй регэксп
Код
(.*)\"\]

Здесь .* забирет все, до последнего встречающегося в тексте символа ] по принципе описанному выше, т.к. этот кватнификатор "жадный"

Я бы немного изменил оба выражения примерно так
первое:
Код
\[url=\"
([^\"]*)
\"\]
([^\]*])
\[\/url\]

второе
Код
\[img=\"
([^\"]*)
\"\]

(разбил по строчкам для облегчения восприятия)

Вроде должны работать
Или можно использовать "нежадные" кватнификаторы

Это сообщение отредактировал(а) AriX - 9.9.2005, 13:56
PM MAIL   Вверх
-=Ustas=-
Дата 9.9.2005, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 6
Всего: 69



Пасибки за пояснение, буду разбираться.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 9.9.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



-=Ustas=-
тебе надо .*? использовать.
А вообще ты же вроде должен был видеть темы, в которых регулярки для этих вещей уже давались, ты в них сам вроде отмечался даже smile

PM ICQ   Вверх
-=Ustas=-
Дата 9.9.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 6
Всего: 69



Цитата(Mal @ 9.9.2005, 16:37)
-=Ustas=-
А вообще ты же вроде должен был видеть темы, в которых регулярки для этих вещей уже давались, ты в них сам вроде отмечался даже smile

Мне не нужны готовые регулярки. Я просто просто начал учить их по Дж.Фридлу, некоторые вещи я не догнал, поэтому за пояснениями и обратился. smile
AriX, кстати, пробовал по твоему принципу - ничего не понял, и ничего не работает. smile
Добавлено @ 16:47
Mal Hack, чётко подсказал!!! Идеально работает. Пасибки!
Добавлено @ 16:48
А пояснить данную конструкцию не мог бы? Именно эту связку .*? .

Это сообщение отредактировал(а) -=Ustas=- - 9.9.2005, 16:50


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 9.9.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата
А пояснить данную конструкцию не мог бы? Именно эту связку .*? .

Это так сказать "жадность".
Т.е. .*? - любой символ, пока не встретиться первый ", а .* - любой символ до последнего ". Это на практике так.
Более точно принцип описан тут: http://php.rinet.ru/manual/ru/reference.pc...tern.syntax.php
В принципе это лучший хэлп для всего...
PM ICQ   Вверх
-=Ustas=-
Дата 9.9.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

Репутация: 6
Всего: 69



Большое спасибо! В нэте сколько лазил, но на данный ман почему-то не натыкался. smile


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


 




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


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

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