[英]Regex to split BBCode into pieces
我有這個:
str = "some html code [img]......[/img] some html code [img]......[/img]"
我想得到這個:
["[img]......[/img]","[img]......[/img]"]
請不要使用BBCode。 這是邪惡的 。
當開發人員懶得無法正確解析HTML並決定發明自己的標記語言時,BBCode誕生了。 與所有懶惰產品一樣,結果完全不一致,不規范且被廣泛采用。
嘗試使用用戶友好的標記語言,例如Markdown (這是Stack Overflow所使用的)或Textile 。 他們兩個都有Ruby的解析器:
如果您仍然不想聽我的建議並選擇使用BBCode,請不要重新發明輪子並使用BBCode解析器 。 要直接回答您的問題,最不希望的選擇是:使用正則表達式。
/\[img\].*?\[\/img\]/
如在紅寶石上看到的 。 盡管我會使用/\\[img\\](.*?)\\[\\/img\\]/
,所以它將提取img
標記內的內容。 請注意,這是相當脆弱的,如果存在嵌套的img
標簽,它將破壞。 因此,建議使用解析器。
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]"]
請記住,這是一個非常具體的答案,它基於您的確切問題。 例如,通過在圖像標簽中添加圖像標簽來更改str
, 所有地獄都會崩潰 。
Google Code中有一個ruby BBCODE解析器 。
不要為此使用正則表達式。
str = "some html code [img]......[/img] some html code [img]......[/img]"
p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.