我想为 php 网站开发一个 bbcode 过滤器。(我正在使用 cakephp,它将是一个 bbcode 助手)我有一些要求。
Bbcodes 可以嵌套。所以这样的事情是有效的。
[block]
[block]
[/block]
[block]
[block]
[/block]
[/block]
[/block]
Bbcode 可以有 0 个或多个参数。
示例:
[video: url="url", width="500", height="500"]Title[/video]
Bbcodes 可能有多种行为。
比方说,[url]text[/url]
将转换为[url:url="text"]text[/url]
或视频 bbcode 将能够在 youtube、dailymotion 之间进行选择......
我认为它可以满足我的大部分需求。我已经用正则表达式做了一些事情。但我最大的问题是匹配参数。事实上,我得到了嵌套的 bbcode 和 0 参数的 bbcode。但是当我为参数添加正则表达式匹配时,它没有正确匹配嵌套的 bbcode。
"\[($tag)(=.*)\"\](.*)\[\/\1\]"
// 不是 .* 而是非贪婪匹配器
我现在没有完整的正则表达式,但我有一些看起来像那样的东西(上图)。
那么有没有办法用正则表达式或其他东西有效地匹配 bbcode。我唯一能想到的是使用访问者模式并以这种方式将我的文本与每个可能的标签分开,我可以对我的文本解析有更多的控制,我可能可以验证我的文档,所以如果输入文本没有'没有有效的 bbcode。我可以在保存任何内容之前通知用户错误。
我会使用 sablecc 创建我的文本解析器。 http://sablecc.org/
有更好的主意吗?或任何可能导致高效灵活的 bbcode 解析器的东西?
谢谢你,对不起我的英语不好......