正则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\]/,"")}