Ben Hughes说得对。特别是如果你想要以100%的准确性解析来自维基百科等大型维基网站的真实文章,这将非常困难。这个问题经常在wikitech邮件列表中讨论,尽管有许多尝试,但没有其他可替代的解析器能够胜任。首先,它实际上并不是一个解析器,因为它没有抽象语法树(AST)的概念。它是一个专门将文本转换为HTML的转换器。其次,不要陷入认为维基文本是一个可以偶尔使用HTML扩展的标记语言的陷阱。你必须把它看作是HTML的扩展。向HTML解析器添加维基文本支持比向维基文本解析器添加HTML支持容易得多。总之,如果你想要任何其他格式,你需要从HTML转换到该格式。基本上,只有MediaWiki可以解析维基文本。但是,解析器与其他代码紧密集成。有经验的MediaWiki黑客对于隔离解析器的问题反应不佳 - 我已经尝试过了(-:但我还是隔离了它。它还不完整,也没有准备好与任何人分享。但基本上,你需要从未安装或连接到数据库或Web服务器的MediaWiki源代码开始。创建一个包含解析器的PHP存根程序,并调用入口点。当它无法运行时检查错误并制作一个虚假的存根类、函数或全局变量。重复这个过程,直到你已经为解析器与MediaWiki的大部分交互位置制作了存根。然后问题就来了,如何保持你的黑客存根版本与源代码树的同步,因为源代码树变化很快,现有的维基网站会非常快地接受解析器的变化,如果你想要让它在未来继续工作,你的变体也必须跟上变化。请查看我的功能请求:Bug 25984 - 隔离解析器与数据库依赖关系。
实际上,这是一种非常难以解析的格式。您可以尝试将解析器组件从MediaWiki中分离出来(因为它也是PHP),但它是一个混乱的麻烦。我见过一些部分独立的解析器,对于极其有限的标记子集,它们做得相当不错。 如果您恰好实现了其中之一,或重构了当前的维基百科解析器,请告诉我,因为它可能非常有用。