2009-10-27 1 views
0

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

Есть два случая, я хочу, чтобы:

[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> 

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

+0

Я извиняюсь, это выглядит ужасно, но, по-видимому, даже если я бежал символы, и в окне предварительного просмотра она выглядит хорошо, результат не так хорошо. – Astaar

+0

Какой двигатель регулярного выражения вы будете использовать? – Lucero

ответ

2

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

\[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 («, <,> и т. Д.) Могут« сломать »содержимое тега.

+0

Это действительно способ сделать это с помощью чистого регулярного выражения. – Kaivosukeltaja

+0

Удивительно, это прекрасно. Благодаря тонну. – Astaar

2

Что-то вроде этого ужасного часть работы должен сделать это:

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

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

+0

Это действительно работает, просто проверял его сам. Если текст не указан, $ 2 - undef (в Perl в любом случае). И он идеально подходит для обеих форм URL. –

+0

Это работает, только если у вас есть условный оператор после этого, он не работает в качестве шаблона замены из-за дополнительного тега BB-конца. – Lucero

0

анализируем функции BBCode2HTML ($ текста)

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

Алгоритм преобразования BBCode 2 HTML является: 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

 Смежные вопросы

  • Нет связанных вопросов^_^