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

我试图从给定的字符串中删除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]标签。

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

这将仅删除此页面定义的BB代码标记。

但是,它可能会删除超过被认为有效的BB代码标记。 例如, [b ]Bold[/b] 没有用这个BBCode测试器加粗,所以右边的那些标签应该保持不变。 但是[\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]+)?\]/ 

正如本演示中所示,正则表达式也未正确处理[code]标记。 替换应该只在code标记之间留下[code]

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