【发布时间】:2011-04-16 21:08:19
【问题描述】:
我有这个:
str = "some html code [img]......[/img] some html code [img]......[/img]"
我想得到这个:
["[img]......[/img]","[img]......[/img]"]
【问题讨论】:
-
正则表达式并不是最好的选择。
我有这个:
str = "some html code [img]......[/img] some html code [img]......[/img]"
我想得到这个:
["[img]......[/img]","[img]......[/img]"]
【问题讨论】:
Google 代码中有一个ruby BBCODE parser。
不要为此使用正则表达式。
【讨论】:
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。
【讨论】:
str = "some html code [img]......[/img] some html code [img]......[/img]"
p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")}
【讨论】:
请不要使用 BBCode。这是邪恶的。
BBCode 诞生于开发人员 懒得正确解析 HTML 并决定发明自己的标记 语言。与所有产品一样 懒惰,结果完全 不一致、不规范和 被广泛采用。
尝试使用用户友好的标记语言,例如 Markdown(这是 Stack Overflow 使用的)或 Textile。 他们都有 Ruby 的解析器:
如果您仍然不想听我的建议并选择使用 BBCode,请不要重新发明轮子并使用 BBCode parser。要直接回答您的问题,有一个最不理想的选择:使用正则表达式。
/\[img\].*?\[\/img\]/
如rubular 所示。虽然我会使用/\[img\](.*?)\[\/img\]/,但它会提取img 标签内的内容。请注意,这是相当脆弱的,如果有嵌套的img 标签,它就会中断。因此,建议使用解析器。
【讨论】:
BBCode came to life when developers were too lazy to parse HTML correctly and decided to invent their own markup language. 这不是一个可靠的论点,而是一个主观意见。 BBcodes 已经存在了很长时间,并且仍然在论坛上使用。人们认识他们。相反,纺织到底是什么?我没听说过。我相信大多数人也是如此。如果旧自行车能很好地发挥作用,为什么要重新发明一辆新自行车?