2010-09-24 47 views
0

我有這樣的:正則表達式的BBCode分裂成碎片

str = "some html code [img]......[/img] some html code [img]......[/img]" 

,我希望得到這樣的:

["[img]......[/img]","[img]......[/img]"] 
+5

正則表達式並不完全是這個選擇的最佳選擇。 – muhmuhten 2010-09-25 03:05:01

回答

7
irb(main):001:0> str = "some html code [img]......[/img] some html \ 
code [img]......[/img]" 
"some html code [img]......[/img] some html code [img]......[/img]" 
irb(main):002:0> str.scan(/\[img\].*?\[\/img\]/) 
["[img]......[/img]", "[img]......[/img]"] 

請記住,這是一個非常具體的答案,根據您的確切問題。通過例如在圖像標籤和all Hell will break loose中添加圖像標籤來改變str

4

有一個在谷歌代碼一個ruby BBCODE parser

不要使用正則表達式。

+0

我想得到一個數組,而不是bbcode到html或html到bbcode – squarezw 2010-09-24 17:25:55

+0

@square ::嗯,我的閱讀是用解析器,你可以創建任何你喜歡的輸出,不管是HTML還是簡單的數組。這個解析器只是一個建議,還有其他的,我確定。關鍵點是:你的時間最好花在瞭解如何使用解析器,而不是試圖用正則表達式來完成。即使它起初看起來相反。 – Tomalak 2010-09-24 21:22:17

-1
str = "some html code [img]......[/img] some html code [img]......[/img]" 
p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")} 
45

請不要使用BBCode。這是邪惡

BB代碼來生活,當開發商 懶得正確解析HTML ,決定創造自己的標記語言 。與所有產品 懶惰一樣,結果完全是 不一致,非標準化和 被廣泛採用。

嘗試使用一個用戶友好的標記語言,就像Markdown(這就是堆棧溢出使用)或Textile。 他們都有解析器紅寶石:


如果你還不想聽從我的意見,並選擇去BBCode,不要重新發明輪子並使用BBCode parser。要直接回答你的問題,最不理想的選擇是:使用正則表達式。

/\[img\].*?\[\/img\]/ 

如在rubular上看到的那樣。雖然我會使用/\[img\](.*?)\[\/img\]/,所以它會提取img標籤內的內容。請注意,這是相當脆弱的,如果嵌套img標籤將會中斷。因此,建議使用解析器。

+0

+1僅供參考。儘管它是一個解析器,而不是解釋器。 – muhmuhten 2010-09-25 03:03:19

+1

@sre我知道我不能成爲那個只以熱情憎恨BBCode的人。 – NullUserException 2010-09-25 03:06:17

+14

bbcode是一個構思不良,設計糟糕,通常實施效果不佳的html淘汰。它唯一的救贖品質是它往往比html短。當然,這並不難。 – muhmuhten 2010-09-25 03:10:26