正则表达式将BBCode拆分成碎片

squ*_*ezw 0 ruby regex split bbcode

我有这个:

str = "some html code [img]......[/img] some html code [img]......[/img]"
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

["[img]......[/img]","[img]......[/img]"]
Run Code Online (Sandbox Code Playgroud)

Nul*_*ion 46

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

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

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


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

/\[img\].*?\[\/img\]/
Run Code Online (Sandbox Code Playgroud)

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

  • bbcode是一个构思错误,设计糟糕,通常很难实现的html淘汰赛.它唯一的兑换质量是它往往比html短.当然,这并不难做到. (15认同)
  • +1 BBCode实际上是带方括号和同义词的HTML. (6认同)

Yas*_*man 7

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]"]
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个非常具体的答案,它基于您的确切问题.改变str,比方说,添加图像标签内的图像标签,和所有的地狱将打破松散.