| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > BBcode разбор |
| Автор: kvv 4.5.2006, 14:45 | ||
Текст отпарсится так: <b><i>так</b></i>. Для обычного браузера еще ничего, но в во флеше это криво воспримется - последующий текст будет жирным. Как это можно исправить? |
| Автор: IvanB 4.5.2006, 16:12 | ||||
| У тебя что написано? Ты
У тебя в строке такого нет. $txt которая. |
| Автор: kvv 4.5.2006, 17:48 | ||
Описка.
|
| Автор: Mal Hack 4.5.2006, 18:45 | ||
| Я вообще по другому делал... Глянул, делал вообще не оптимально... Я бы тут сейчас сделал бы так:
|
| Автор: S.A.P. 5.5.2006, 14:00 |
| Mal Hack, а как быть со вложенными тегами? |
| Автор: Replicator 5.5.2006, 14:33 |
| Прогнать регулярку несколько раз. Я у себя дважды это делаю, хотя можно это делать в цикле, пока все не заменишь. P.S. MalHack, спасибо за код. А то у меня гораздо длиннее выражение, да и помедленней. |
| Автор: R.M. 5.5.2006, 15:48 |
| S.A.P., можно проверить соответствие строк если заменённая равна той которая была до этого прекращать цикл |
| Автор: Mal Hack 5.5.2006, 18:59 | ||||
А для чего я там модификатор e поставил? Ну тут вообще тогда надо бы делать через preg_replace_callback, в принципе это лучше с той стороны, что в плане кодинга интеитивнее понятнее и есть больше шансов на дальнейшее улучшение. |
| Автор: kvv 5.5.2006, 22:23 | ||
Warning: Compilation failed: reference to non-existent subpattern at offset 8 in c:\program files\apache group\apache\htdocs\test.php on line 5 |
| Автор: Mal Hack 5.5.2006, 23:53 | ||
Отладь сам. |
| Автор: kvv 6.5.2006, 06:38 | ||||||||||
Не очень силен в регах. Поясните пожалуста:
Если этот модификатор установлен, функция делает нормальную замену обратных ссылок в скроке замены, выполняет это как пхп код, и использует результ для замены в поисковой строке. Как это понять? Еще не пойму смысла знака # в начала и в конце. В хелпе написано только это:
Но у нас PCRE_EXTENDED не установлен. Да и зачем закомменчивать всю строку? Вот, что у меня получилось(убрал #, заэкранил \):
Выдает:
Но замена-то сделана по-одному разу, а если использовать квантификатор e, то выдает это:
|
| Автор: S.A.P. 6.5.2006, 08:37 | ||||
это далеко не оптимальное решение kvv, может быть Mal Hack, имел ввиду вот это:
но у меня есть подозрения, что код будет медленно работать... |
| Автор: kvv 7.5.2006, 05:55 |
| Ну хотя-бы работает. Всем спасибо. |
| Автор: Mal Hack 7.5.2006, 10:34 | ||
Вообще-то я несколько другое имел ввиду... Реги сами поддерживают рекурсивный проход, но вот синтаксис точно не помню. К примеру при таком варианте не прокатит вот это: Не должно по крайней мере.
|
| Автор: S.A.P. 7.5.2006, 16:10 |
| это я привел для примера. Для рабочего решения это явно не катит, т.к. существует проблема с кавычками. С рекурсивными регами у меня ничего не вышло (может при замене они не работают?). Если собираешься использовать ручную рекурсию, то советую разобраться и переделать код на preg_replace_callback. |
| Автор: kvv 7.5.2006, 16:46 | ||||
| Не пойму вас. Мне тот вариант понравился. Вроде все работает. Смысла в preg_replace_callback() не увидел, ведь это тоже самое получается... Может, я что-то там не понимаю?
|
| Автор: Mal Hack 7.5.2006, 23:23 | ||
Хм... Что-то через рекурсию внутри шаблонов у меня не получилось. Сделал вот так:
|
| Автор: kvv 8.5.2006, 05:28 | ||||
Эм... непонял. Мы берем тег в квадратных скобках, в BBCode() он оказывается в переменной $str - и потом в нем мы опять ищем рег?
Выдает:
Ну так и есть... Получились теги в тегах%) |
| Автор: Mal Hack 8.5.2006, 12:44 | ||
А как надо?
Другого выхода я пока не вижу, т.к. рекурсивные шаблоны у меня не стали работать. |
| Автор: kvv 8.5.2006, 14:00 |
Мой второй пост сверху - там как раз получилось как надо. Ведь самое главное - чтоб не было перекрывания тегов, то есть ситуаций типа <b><i>smth</b></i> |
| Автор: Mal Hack 8.5.2006, 14:31 | ||
|
| Автор: kvv 8.5.2006, 14:40 |
| Mal Hack, Мы друг друга не понимаем%) Уже ж все получилось - чего еще париться то? Предлагаешь ты все ту же рекурсию - скорость парсинга не увеличивается. Да и что-то ты не то в последнем коде делаешь... Третья переменная в функцию не передается, а ты ее иссетом проверяешь... И выводит он совем не то. |
| Автор: Mal Hack 8.5.2006, 14:57 | ||
| Тогда не понимаю в чем проблема? Вот подправленный:
|
| Автор: BobiKK 11.5.2006, 18:30 |
| Кстати, а это никто не пробовал? http://pear.php.net/package/HTML_BBCodeParser |