我有这样的:正则表达式的BBCode分裂成碎片
str = "some html code [img]......[/img] some html code [img]......[/img]"
,我希望得到这样的:
["[img]......[/img]","[img]......[/img]"]
我有这样的:正则表达式的BBCode分裂成碎片
str = "some html code [img]......[/img] some html code [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]"]
请记住,这是一个非常具体的答案,根据您的确切问题。通过例如在图像标签和all Hell will break loose中添加图像标签来改变str
。
有一个在谷歌代码一个ruby BBCODE parser。
不要使用正则表达式。
str = "some html code [img]......[/img] some html code [img]......[/img]"
p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")}
请不要使用BBCode。这是邪恶。
BB代码来生活,当开发商 懒得正确解析HTML ,决定创造自己的标记语言 。与所有产品 懒惰一样,结果完全是 不一致,非标准化和 被广泛采用。
尝试使用一个用户友好的标记语言,就像Markdown(这就是堆栈溢出使用)或Textile。 他们都有解析器红宝石:
如果你还不想听从我的意见,并选择去BBCode,不要重新发明轮子并使用BBCode parser。要直接回答你的问题,最不理想的选择是:使用正则表达式。
/\[img\].*?\[\/img\]/
如在rubular上看到的那样。虽然我会使用/\[img\](.*?)\[\/img\]/
,所以它会提取img
标签内的内容。请注意,这是相当脆弱的,如果嵌套img
标签将会中断。因此,建议使用解析器。
+1仅供参考。尽管它是一个解析器,而不是解释器。 – muhmuhten 2010-09-25 03:03:19
@sre我知道我不能成为那个只以热情憎恨BBCode的人。 – NullUserException 2010-09-25 03:06:17
bbcode是一个构思不良,设计糟糕,通常实施效果不佳的html淘汰。它唯一的救赎品质是它往往比html短。当然,这并不难。 – muhmuhten 2010-09-25 03:10:26
正则表达式并不完全是这个选择的最佳选择。 – muhmuhten 2010-09-25 03:05:01