正则expression式把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]"] 

请记住,这是一个非常具体的答案,这是基于你的确切问题。 通过在图片标签中添加一个图片标签来改变str所有的地狱都会被打破

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

当开发者懒得正确地parsingHTML并决定发明他们自己的标记语言时,BBCode才得以实现。 与所有懒惰产品一样,结果是完全不一致,不规范,被广泛采用。

尝试使用用户友好的标记语言,如Markdown (StackOverflow使用什么)或Textile 。
他们都有Ruby的parsing器:

  • Markdown的Maruku
  • 用于纺织的红布

如果你仍然不想听从我的build议,并selectBBCode,不要重新发明轮子,并使用BBCode分析器 。 要直接回答你的问题,有最不理想的select:使用正则expression式。

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

正如在rubular上看到的那样 。 虽然我会使用/\[img\](.*?)\[\/img\]/ ,所以它会提取img标签内的内容。 请注意,这是相当脆弱的,如果有嵌套的img标签将会中断。 因此,build议使用parsing器。

在谷歌代码有一个rubyBBCODE分析器 。

不要使用正则expression式。

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