2010-09-24 52 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