我正在尝试从给定字符串中删除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]
标签。
答案 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
加粗,其余部分没有粗体。如果你允许嵌套标签,那么正则表达式不是一个好的选择。