用于剥离BBCode的Ruby正则表达式

时间:2013-02-04 20:46:23

标签: ruby regex bbcode gsub

我正在尝试从给定字符串中删除BBCode(仅使用带有一些正则表达式的gsub)。

这是一个示例字符串:

The [b]quick[/b] brown [url=http://example.com]fox[/url] jumps over the lazy dog [img=http://example.com/lazy_dog.png]

我需要输出的是:

The quick brown fox jumps over the lazy dog

那么这是怎么做到的?我发现了这样做的各种例子,但没有一个适用于我的用例。

我试过的一个:/\[(\w+)[^w]*?](.*?)\[\/\1]/

但是这不会抓住结束[img]标签。

1 个答案:

答案 0 :(得分:4)

这篇文章的目的是显示BBCode如何被解释的差异,在保留内容时剥离BBCode标签时应考虑哪一个

这将仅删除this page定义的BB代码标记。

但它可能会删除超过被认为有效的BB代码标签。例如,[b ]Bold[/b] this BBCode tester加粗,所以右边的那些标记应该保持不变。但[\b]将由以下正则表达式删除。它还会清除非BBC代码,例如[\b=something]

另一个例子是[url=http://example.com/ ][/url](注意空格)。这可能没问题,也可能不行,具体取决于BBCode解析器。下面的正则表达式忽略开始标记,但删除结束标记。

/\[\/?(?:b|u|i|s|size|color|center|quote|url|img|ul|ol|list|li|\*|code|table|tr|th|td|youtube|gvideo)(?:=[^\]\s]+)?\]/

正如this demo中所见,正则表达式也未正确处理[code]标记。替换应在[code]标记之间留下code

BBCode tester允许将[b][b][b]Text[/b][/b][/b]解析为Text粗体,但另一个将其解释为[b][b]Text[/b][/b],其中部分[b][b]Text加粗,其余部分没有粗体。如果你允许嵌套标签,那么正则表达式不是一个好的选择。