【问题标题】:Regex to split BBCode into pieces正则表达式将 BBCode 分成几部分
【发布时间】:2011-04-16 21:08:19
【问题描述】:

我有这个:

str = "some html code [img]......[/img] some html code [img]......[/img]"

我想得到这个:

["[img]......[/img]","[img]......[/img]"]

【问题讨论】:

  • 正则表达式并不是最好的选择。

标签: ruby regex split bbcode


【解决方案1】:

Google 代码中有一个ruby BBCODE parser

不要为此使用正则表达式。

【讨论】:

  • @square:: 嗯,我的理解是,使用解析器,您可以创建任何您喜欢的输出,无论是 HTML 还是简单的数组。这个解析器只是一个建议,我敢肯定还有其他的。关键点是:您的时间最好花在弄清楚如何使用解析器上,而不是尝试使用正则表达式。即使一开始看起来相反。
【解决方案2】:
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,例如,在图像标签中添加图像标签all Hell will break loose

【讨论】:

    【解决方案3】:
    str = "some html code [img]......[/img] some html code [img]......[/img]"
    p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")}
    

    【讨论】:

      【解决方案4】:

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

      BBCode 诞生于开发人员 懒得正确解析 HTML 并决定发明自己的标记 语言。与所有产品一样 懒惰,结果完全 不一致、不规范和 被广泛采用。

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


      如果您仍然不想听我的建议并选择使用 BBCode,请不要重新发明轮子并使用 BBCode parser。要直接回答您的问题,有一个最不理想的选择:使用正则表达式。

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

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

      【讨论】:

      • +1 只是为了报价。虽然它是解析器,而不是解释器。
      • @sre 我知道我不可能是唯一一个对 BBCode 充满热情的人。
      • bbcode 是一个构思不周、设计糟糕且通常实现不善的 html 仿冒品。它唯一的可取之处在于它往往比 html 更短。当然,这并不难做到。
      • +1 BBCode 实际上是带有方括号和同义词的 HTML。
      • BBCode came to life when developers were too lazy to parse HTML correctly and decided to invent their own markup language. 这不是一个可靠的论点,而是一个主观意见。 BBcodes 已经存在了很长时间,并且仍然在论坛上使用。人们认识他们。相反,纺织到底是什么?我没听说过。我相信大多数人也是如此。如果旧自行车能很好地发挥作用,为什么要重新发明一辆新自行车?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多