您的位置:首页 > 其它

如何理解Dregexp

2009-11-17 22:32 169 查看
Dregexp是一个基于正则表达式的格式化解析和纠正原文的工具。

问:Dregexp为的是解决什么样的问题?
答:Dregexp致力于按照给定的格式去解析原文,并纠正原文。
纵观目前流行的全文索引、解析、纠正工具,我们得出如下结论:

全文索引工具,以lucene为例,它提供了许多全局的索引,有效的减低了反复查找的操作。但遗憾的是它本身并不具有纠正和解析能力,所以使用者几乎需要从新写大量的纠正和解析的代码。

解析工具,它们通常只能针对某种格式进行解析,以htmlParse为例,只能解析Html类型的标签。而且遗憾的是大部分的解析工具不具备纠正能力或纠正能力十分有限,如解析html,如果遇到非良构时,通常它们要么提示非良构的地方,要么丢弃掉。但是浏览器能正常容错了,并显示在页面上了,不是吗?

纠正工具,格式纠正工具十分匮乏,即使有,不部分也是查错需要人工去参与纠正。

Dregexp就是问了解决这类问题而存在的。

问:那么Dregexp怎么去解析这些问题呢?

Dregexp认为所有的解析工具都是一样的,不同的只是要解析的格式。为此Dregexp采用正则表达式表示。众所周知正则表达式是最好的格式校验工具,可以有效的限定出现的范围和个数以达到各种不同的组合,如电话号码的检验等。

Dregexp提供原文的扫描器,对于一个格式而言Dregexp只会对原文的每一个字符扫描一次,根本上解决反复查询的问题。而且几乎不会产生全局的索引,Dregexp致力于提供应用足够的局部索引即可。Dregexp会记录下格式与原文的所有匹配比较历程。

Dregexp提供纠正器。当原文出现与格式不匹配时,纠正器被调用。纠正器由使用者配置安装在格式串下任意比较块下,而纠正器的代码又是有使用者去继承子类实现的。这样一来使用者可以随心所欲的获得任何时候不匹配的情况。Dregexp还提供了一系列出错点的信息,包括不匹配发生在原文的位置和发生在格式的哪个比较块上。Dregexp提供了直接对原文修改的方法,允许用户直接对原文修改。另外它要求指出修改的部分是否要符合格式要求,如果需要则指定修改后再次与发生不匹配格式块比较,如果不要求则指定其不与格式块比较。

Dregexp提供解析器。与纠正器不同,解析器只能安装在格式串上,而不是格式块。解析的代码仍然是使用者来实现。而Dregexp则提供了整个比较匹配过程的所有环节,包括经历了哪些格式块、捕获组等,最大限度的为解析工作提供支持。此外,解析器可以指定是否继续扫描任务。如果不继续扫描任务则表示原文的格式解析到此结束。这种机制是为了满足不同需要的制定的,如查找任务(查找第几个出现的关键字的位置)。

总结:
我们应当这样去理解Dregexp:1. Dregexp认为给定了格式串就可以解析出原文;2. 用户可以安装纠正器到用户想要监视的任何位置,并且通过用户编写的纠正器中的代码完成一些特定的功能;3. 用户可以安装解析器对完全符合格式的原文的截取内容进行解析,并且随时可以停止。4. 综合上述,不难看出Dregexp更像是匹配比较过的一个监视器,它的精妙之处在于用户只要给出格式和只用写如何纠正、如何解析的代码,而不需要写大量的类库引擎。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: