我有这个:
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\]/
如rubular 所见。虽然我会使用/\[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\]/,"")}