正则表达式将BBCode拆分成碎片

时间:2010-09-24 16:14:01

标签: ruby regex split bbcode

我有这个:

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

我希望得到这个:

["[img]......[/img]","[img]......[/img]"]

4 个答案:

答案 0 :(得分:46)

请不要使用BBCode。这是邪恶

  

BBCode在开发人员时栩栩如生   太懒了,无法正确解析HTML   并决定发明自己的标记   语言。与所有产品一样   懒惰,结果完全   不一致,不标准化,和   广泛采用。

尝试使用用户友好的标记语言,例如Markdown(这就是Stack Overflow使用的)或Textile。 他们都有Ruby的解析器:


如果您仍然不想听从我的建议并选择使用BBCode,请不要重新发明轮子并使用BBCode parser。要直接回答您的问题,最不可取的选择是:使用正则表达式。

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

rubular。虽然我会使用/\[img\](.*?)\[\/img\]/,但它会提取img标记内的内容。请注意,这是相当脆弱的,如果有嵌套的img标记,则会中断。因此,建议使用解析器。

答案 1 :(得分: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]"]

请注意,这是一个非常具体的答案,它基于您的确切问题。更改str,例如,在图片标记中添加图片标记,然后 all Hell will break loose

答案 2 :(得分:4)

Google Code上有ruby BBCODE parser

不要使用正则表达式。

答案 3 :(得分:-1)

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