繁体   English   中英

正则表达式将BBCode分为几部分

[英]Regex to split BBCode into pieces

我有这个:

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\]/

如在红宝石看到的 尽管我会使用/\\[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\]/,"")}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM