BBCode to XHTML: две возможности, одно регулярное выражение? - PullRequest
0 голосов
/ 27 октября 2009

Я пишу небольшой модуль блога. Я хочу, чтобы пользователи могли набирать BBCode. Мне нужно преобразовать это в XHTML для хранения в БД, что мне удалось сделать для большинства тегов, кроме [url].

Есть два случая, которые я хочу разрешить:

[url=http://stackoverflow.com/]

, который следует преобразовать в

<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>

и

[url=http://stackoverflow.com/]StackOverflow[/url]

, который следует преобразовать в

<a href="http://www.stackoverflow.com" title="StackOverflow">StackOverflow</a>

К сожалению, я не смог этого сделать. Результаты ужасные, и мне интересно, можно ли это сделать в одном регулярном выражении или его нужно разделить на два.

Ответы [ 3 ]

2 голосов
/ 27 октября 2009

Это должно работать:

\[url\s*=\s*([^\]]*)]\s*((?:(?!\s*\[/url\]).)*)\s*\[/url\]|\[url\s*=\s*([^\]]*)]

Шаблон замены:

<a href="$1$3" title="$2">$2$3</a>

Проверено с этим входом:

bla [url=http://stackoverflow.com/]StackOverflow[/url] bla
bla [url=http://stackoverflow.com/] bla

Возвращает:

bla <a href="http://stackoverflow.com/" title="StackOverflow">StackOverflow</a> bla
bla <a href="http://stackoverflow.com/" title="">http://stackoverflow.com/</a> bla

Обратите внимание, что в любом случае вам может потребоваться добавить некоторые проверки / экранирования, поскольку недопустимые символы XML (", <,> и т. Д.) Могут" сломать "содержимое тега.

2 голосов
/ 27 октября 2009

Что-то вроде этого ужасного произведения должно сделать это:

\[url=([^\]]+)\](?:([^\[]+)\[\/url\])?

После сопоставления, URL должен быть помещен в $ 1, а текст в $ 2, если он был указан. Я еще не проверял это, так что это может потребовать некоторых настроек.

0 голосов
/ 11 января 2013

Функция анализа BBCode2HTML ($ text)

https://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#150

Алгоритм преобразования HTML-кода BBCode 2: 1) регулировать текст BBCode код здесь: https://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#60

2) преобразовать регулируемый BBCode в XML код здесь: https://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#101

3) запустить преобразование XSLT в текст XML. Файл XSLT находится здесь https://code.google.com/p/pwision/source/browse/trunk/inc/BBCodeXML2HTML.xslt Преобразование сделано здесь: https://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#113

Надеюсь, я помог!

PS: хороший учебник по XSLT вы можете найти здесь: http://www.w3schools.com/xsl/xsl_languages.asp

...