PHP wiki标记解析器


PHP wiki markup parser

有人告诉我,在PHP中编写依赖于regex和preg函数的wiki标记解析器是一个坏主意。但我不知道为什么。

那么在PHP中编写wiki标记解析器的最佳方法是什么呢?这更像是一个学术"项目",所以重点是我自己写。

提前感谢您的帮助。

你已经被告知,因为"wiki语言"定义不清至少可以说。
真正糟糕的部分是"试图解析"它们,而不是"使用php和regexp "

事实上,我相信它们实际上是在像mediawiki这样的软件中使用regexps(直接进入html,不从中间抽象语法树表示传递)处理的。没有regexp的实际解析在PHP中效率非常低。(除非您使用特定编译的PHP模块进行解析)

请注意,这些软件也有许多可以根据需要激活的语法特性,这可能证明很难有效地编写。

只有真正的麻烦?你必须使用很多转义来解析像[]这样的字符,当你使用preg_match()和php的许多反斜杠时,很容易混淆。除此之外,一个简单的preg_match_all('#''[''[(.*?)'']'']#',$data,$matches,PREG_SET_ORDER);应该可以让您启动并运行。

(除非我被太多的反裁弄糊涂了,那就是):)

问题可能是您必须在wiki页面的整个内容中每次运行一个正则表达式,这需要大量的处理时间。一个简单的解决方案是对标记使用某种分隔符,比如[[,然后从头到尾依次处理文本。每次找到一个标记,就搜索结束标记]]

接下来,使用所定义的规则处理中间的内容。这可以使用简单的字符串索引和替换操作来完成,并且不需要多次处理整个字符串,而是只需一次遍历整个字符串。