| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > Что-то я никак не могу понять |
| Автор: -=Ustas=- 9.9.2005, 10:30 | ||||
| Здрасте! Прошу не ругать, я с ними (регами) еще не очень подружился, вот, пытаюсь. Значит есть такой дескриптор в переменной: [ URL=http://\"http://www.site.ru/test_link.html\"]Тестовая ссылка[/URL ] Заменяю его так:
- этот заменяется замечательно. А есть вот такой [img=\"pic\image.gif\"], заменяю его почти идентично, за исключением закрывающего дескриптора:
Так он, после нахождения первого вхождения загребает в себя весь остальной текст, в том числе и [url=...] и [hr] и вообще всё, что дальше идет, как если бы не стояло в конце закрывающей - ]. Следовательно замена потом не работает. Если же я инвертирую "жадность" модификатором U, то тогда нормально, но ведь в первом, где [url=]...[/url] без этого модификатора всё нормально пашет. Ничего не понимаю!!! Заранее пасибки! |
| Автор: AriX 9.9.2005, 13:54 | ||||||||
| -=Ustas=- Не претендую на правильность, но по-моему и первый регэксп у тебя неправильный Щас примерно объясню Первый регэксп
.* забирает сначала все, потом отдает по одному символу, до того момента, когда совпадет \[\/url\] Если у тебя в тексте всего одна [ url ], то все будет нормально, если после этого есть еще [ url ], то конечная часть регэкспа (\[\/url\]) совпадет с закрывающимся тегом у второго [ url ] Второй регэксп
Здесь .* забирет все, до последнего встречающегося в тексте символа ] по принципе описанному выше, т.к. этот кватнификатор "жадный" Я бы немного изменил оба выражения примерно так первое:
второе
(разбил по строчкам для облегчения восприятия) Вроде должны работать Или можно использовать "нежадные" кватнификаторы |
| Автор: -=Ustas=- 9.9.2005, 14:01 |
| Пасибки за пояснение, буду разбираться. |
| Автор: Mal Hack 9.9.2005, 16:37 |
| -=Ustas=- тебе надо .*? использовать. А вообще ты же вроде должен был видеть темы, в которых регулярки для этих вещей уже давались, ты в них сам вроде отмечался даже |
| Автор: -=Ustas=- 9.9.2005, 16:44 | ||
Мне не нужны готовые регулярки. Я просто просто начал учить их по Дж.Фридлу, некоторые вещи я не догнал, поэтому за пояснениями и обратился. AriX, кстати, пробовал по твоему принципу - ничего не понял, и ничего не работает. Добавлено @ 16:47 Mal Hack, чётко подсказал!!! Идеально работает. Пасибки! Добавлено @ 16:48 А пояснить данную конструкцию не мог бы? Именно эту связку .*? . |
| Автор: Mal Hack 9.9.2005, 16:54 | ||
Это так сказать "жадность". Т.е. .*? - любой символ, пока не встретиться первый ", а .* - любой символ до последнего ". Это на практике так. Более точно принцип описан тут: http://php.rinet.ru/manual/ru/reference.pcre.pattern.syntax.php В принципе это лучший хэлп для всего... |
| Автор: -=Ustas=- 9.9.2005, 19:26 |
| Большое спасибо! В нэте сколько лазил, но на данный ман почему-то не натыкался. |