php: PCRE для закрытия одиночных bb-тегов

Модератор: Модераторы разделов

Аватара пользователя
Kasper_WPS
Сообщения: 312
ОС: Gentoo

php: PCRE для закрытия одиночных bb-тегов

Сообщение Kasper_WPS »

Проблема в том, что необходимо во всем тексте найти не закрытые bb-теги и закрыть их, простите за тафтологию :)

[ p ][ b ][ i ]Пример[ / i ][ / b ] моей глупости :)

Как видите нет закрывающего тега [ / p ] Как должно выглядеть регулярное выражение для замены? Вот что-то пытался написать:

'/\[(p|pre|li|center|i|b|u|code|php|sql|url|img)\](.*?)(?!\[\/\\1\])/si' => '[\\1]\\2[/\\1]',

Но (?!\[\/\\1\]) - вот эта часть, написана не правильно. Как ее изменить, чтобы проверялось до конца строки отсутствие [\/\\1]

Спасибо за внимание
PS: не уже ли никто не пытался это реализовать? И возможно ли вообще на PCRE?
Gentoo Linux - Stage1 - Core2 Q6600 Quad - 2008.0
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: php: PCRE для закрытия одиночных bb-тегов

Сообщение KiWi »

А если взять пример:

Код: Выделить всё

[b][p][i]Пример[/i][/b] моей глупости

То результатом закрытия должно быть:

Код: Выделить всё

[b][p][i]Пример[/i][/p][/b] моей глупости


Если очень захотеть, то можно подумать ещё и найти с десяток вариантов, где будет не всё так просто.

Так что шлите нафиг такие теги, чтобы исправляли.
Спасибо сказали:
Аватара пользователя
Kasper_WPS
Сообщения: 312
ОС: Gentoo

Re: php: PCRE для закрытия одиночных bb-тегов

Сообщение Kasper_WPS »

IFL писал(а):
02.01.2007 17:39
А если взять пример:

Код: Выделить всё

[b][p][i]Пример[/i][/b] моей глупости

То результатом закрытия должно быть:

Код: Выделить всё

[b][p][i]Пример[/i][/p][/b] моей глупости


Если очень захотеть, то можно подумать ещё и найти с десяток вариантов, где будет не всё так просто.

Так что шлите нафиг такие теги, чтобы исправляли.

Не могу нафиг послать :) Очень надо. Реализуется при помощи дополнительной функции, просто очень надо с помощью одного регулярного выражения. А те примеры что вы привели должны тоже правильно отработать на моем рег выражении, просто вот эта часть (?!\[\/\\1\]) неправильная, как сделать исключение в этом же рег-ом выражении? Спасибо!

PS: А результатом будет:

Код: Выделить всё

[b][p][i]Пример[/i][/b] моей глупости[/p]


Да и чего-то я погорячился с тегами i, b, u, исключу я их спасибо, а вот [p] - обязательно нужно заменить.
Gentoo Linux - Stage1 - Core2 Q6600 Quad - 2008.0
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: php: PCRE для закрытия одиночных bb-тегов

Сообщение elide »

Код: Выделить всё

[b][p][i]Пример[/i][/b] моей глупости[/p]

так это же неправильный код, или я чего-то не понимаю?
слава роботам!
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: php: PCRE для закрытия одиночных bb-тегов

Сообщение KiWi »

На phpclub.ru выкладывали ссылку на сорцы парсера ББ-кода на конечных автоматах -- ищите, может быть, помогут(в нормальном закрытии).
Спасибо сказали:
Аватара пользователя
Kasper_WPS
Сообщения: 312
ОС: Gentoo

Re: php: PCRE для закрытия одиночных bb-тегов

Сообщение Kasper_WPS »

IFL писал(а):
02.01.2007 22:36
На phpclub.ru выкладывали ссылку на сорцы парсера ББ-кода на конечных автоматах -- ищите, может быть, помогут(в нормальном закрытии).


Читал, не помогло. Спасибо. Напишу дополнительную функцию, - костыль, а что делать :wacko:
Gentoo Linux - Stage1 - Core2 Q6600 Quad - 2008.0
Kernel: Gentoo-sources - 2.6.36 GCC 4.5.1
XOrg-server 1.9.2 (NVIDIA-9600GT), KDE4 4.5.4
Спасибо сказали: