|
|
|
| Мне нужно сделать замену смайлика вне ббкода. Как сделать правильно?
Пробовал вот так
$text = preg_replace('#(?<!\[php\]|\[code\]).*(;-\)|;\)).*(?!\[/php\]|\[/code\])#uUs', '<img src="http://'.$_SERVER['SERVER_NAME'].'/smiles/default/1.png" alt="smile"/>', $text, -1, $count);
но заменяется весь текст до и после смайлика. Как сделать, чтобы .* не заменялось? | |
|
|
|
|
|
|
|
для: Fuelen
(22.03.2010 в 21:46)
| | я один не понял о чем тут речь ? | |
|
|
|
|
|
|
|
для: imustang
(23.03.2010 в 02:33)
| | Например есть текст
:) [php] бла-бла-бла :) бла-бла-бла[/php]
Вот тот смайлик, что не между тегами [php] и [/php] надо заменить на картинку.
Если заменяю кодом, что выше, то остается только тот перый смайл, а текст дальше удаляется. Как сделать, чтобы он не удалялся? Так понятнее? :) | |
|
|
|
|
|
|
|
для: Fuelen
(23.03.2010 в 08:01)
| | Вариант #1 Не использовать регулярные выражения. См. xBB
Вариант # 2 Разбить весь текст с помощью preg_split():
<?php
print_r(preg_split('/(\\[.+?\\])/', ":) [php] бла-бла-бла :) бла-бла-бла[/php]", -1, PREG_SPLIT_DELIM_CAPTURE));
|
Тогда под чётными индексами массива всегда будет текст, а под нечётными -- теги. Дальше думать.
А все варианты с preg_replace() сосут. | |
|
|
|
|
|
|
|
для: Тень&
(23.03.2010 в 16:58)
| | Спасибо)) | |
|
|
|
|
|
|
|
для: Тень&
(23.03.2010 в 16:58)
| |
_r(preg_split('/(\\[.+?\\])/', ":) [php] бла-бла-бла :) бла-бла-бла[/php]", -1, PREG_SPLIT_DELIM_CAPTURE));
|
>Тогда под чётными индексами массива всегда будет текст, а под нечётными -- теги.
пока кто-нибудь не напишет вложенные бб-теги.
>Дальше думать.
О да. | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2010 в 22:32)
| | Игорь Вячеславович, гляньте на досуге на исходник поста (23.03.2010 в 22:32), пожалуйста.
Сдается мне, что там что-то не так рендерится. Тег [code] я не открывал. Как бы дыры какой не вышло... | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2010 в 22:48)
| | Да, не не должно - просто вычленение идет не по регулярным выражениям - срабатывает 0 по умолчанию - это всегда будет если имеется один закрывающий блок [ /code]. | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2010 в 22:32)
| | > пока кто-нибудь не напишет вложенные бб-теги.
Поясните | |
|
|
|
|
|
|
|
для: Тень&
(24.03.2010 в 18:11)
| | ну фиг знает. Мало ли у кого какая фантазия...
[quote] ... [php] .... [/php] .... [/quote] | |
|
|
|
|
автор: Тень&&& (24.03.2010 в 21:41) |
|
|
для: Trianon
(24.03.2010 в 21:16)
| | Ну и? Не понимаю смысл "фырка", как Вы сами любите говорить. preg_split() тут выполняет роль tokenizer'а, а уже дальше формируем сообщение в соответствии со своими требованиями. | |
|
|
|
|
|
|
|
для: Тень&&&
(24.03.2010 в 21:41)
| | Я обычно выделяю мысль, на которую обращаю внимание:
>Тогда под чётными индексами массива всегда будет текст, а под нечётными -- теги.
четные и нечетные индексы будут отвечать фрагментам вне и внутри только при одном уровне тегов.
Если они вложены - уже не будут. | |
|
|
|
|
автор: Тень&& (24.03.2010 в 21:58) |
|
|
для: Trianon
(24.03.2010 в 21:45)
| | Вы проверяли? | |
|
|
|
|
|
|
|
для: Тень&&
(24.03.2010 в 21:58)
| | Нет.
Действительно, не заметил PREG_SPLIT_DELIM_CAPTURE . | |
|
|
|
|
|
|
|
для: Fuelen
(23.03.2010 в 08:01)
| | (?=\[php\])(?:(?!\[\/php\]).)*(:\)) | |
|
|
|