0

我有这个:

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

我想得到这个:

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

4 回答 4

47

请不要使用 BBCode。这是邪恶的。

当开发人员懒得正确解析 HTML 并决定发明自己的标记语言时,BBCode 应运而生。与所有懒惰的产品一样,其结果是完全不一致的、不规范的,并被广泛采用。

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


如果您仍然不想听我的建议并选择使用 BBCode,请不要重新发明轮子并使用BBCode 解析器。要直接回答您的问题,有一个最不理想的选择:使用正则表达式。

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

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

于 2010-09-25T02:49:17.240 回答
8
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例如,通过在图像标签中添加图像标签来进行更改,所有地狱都会崩溃

于 2010-09-24T19:35:07.823 回答
4

Google Code 上有一个ruby​​ BBCODE 解析器

不要为此使用正则表达式。

于 2010-09-24T16:17:28.160 回答
-1
str = "some html code [img]......[/img] some html code [img]......[/img]"
p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")}
于 2010-09-25T02:40:23.857 回答