用于剥离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
加粗,其余部分不加粗。 如果你允许嵌套标签,那么正则表达式不是一个好的选择。