2009-10-27 67 views
0

我正在寫一個小博客模塊。我希望用戶能夠輸入BBCode。我需要將其轉換爲XHTML以存儲在DB中,這是我爲大多數標籤設計的,除了[url]BBCode to 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 2009-10-27 18:35:59

+0

你會使用什麼樣的正則表達式引擎? – Lucero 2009-10-27 18:50:57

回答

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 2009-10-27 19:23:31

+0

太棒了,這是完美的。萬分感謝。 – Astaar 2009-10-27 22:21:36

2

事情是這樣的可怕的一件工作應做到:

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

一旦匹配,如果已指定其本應放在$ 1中的網址,並在$ 2中的文本。我沒有測試這個,所以它可能需要一些調整。

+0

這確實有用,只是自己測試過。如果沒有指定文本,$ 2就是undef(反正在Perl中)。它匹配兩種形式的網址都很好。 – 2009-10-27 18:59:52

+0

僅當您之後有條件聲明時纔有效,由於可選的BB結束標記,它不能用作替換模式。 – Lucero 2009-10-27 19:03:57

0

Analize功能BBCode2HTML($文本)

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

改造的BBCode 2 HTML的算法是: 1)調整BB代碼的文本 代碼在這裏: https://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#60

2)改造將BBCode規定爲XML code here: https://code.google.com/p/pwision/source/browse/trunk/inc/BBCode.inc#101

3)對XML文本運行XSLT轉換。 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