Dregexp终于 问世……
* 什么是Dregexp?
Dregexp是一个基于正则表达式的格式化解析和纠正原文的工具。
* 为解决什么关键问题?
传统的分析原文工具显得不够灵活而且代码重用性较差。与传统的格式分析(语义分析)器不同的是,它更通用,更便捷。与同类技术相比它有良好的功能扩展,和强力的纠正错误的能力。
目前Dregexg正式发布1.0版本
http://code.google.com/p/dregexp/downloads/list
下面将对dregexp做详细的介绍
它具有以下几个优点:
1. dreamRegexp采用正则表达式作为格式定义,使得匹配规则更灵活,更符合正常思维。
2. dreamRegexp采用配置化,使得匹配过程规则变得更加通明,简单。
3. dreamRegexp支持Parser解析器,当出现一次匹配完成时,将调用解析器完成捕获原文的字符串的解析工作。
4. dreamRegexp支持Correcter纠正器,当出现不匹配时,调用纠正器以修改原文以达到匹配。这是其他同类技术难以实现的功能。
5. dreamRegexp提出CorrectPoint纠正点的概念。其意义在于目的性的安装Correcter纠正器到指定的比较块。只有已安装纠正器的比较块出现不匹配时才会调用到所安装的纠正器
6. dreamRegexp支持正则表达式的所有特殊字符,包括各种内容范围符号与限定符,如:.?*
7. dreamRegexp支持正则表达式的捕获组。如: /1
8. dreamRegexp提供了良好的解析和纠正选项。你可以随时停止对下文的解析任务,你还可以纠正原文之后而不要求满足当前块的匹配。
清单
dregexp-1.0-jdk1.5.jar 适用于jdk1.5
dregexp-1.0-jdk1.6.jar 适用于jdk1.6
DreamRegexpDemo.zip 演示版本,内置api,dregexp-1.0-jdk1.5.jar,dregexp-1.0-jdk1.6.jar
部署
步骤1. 根据需要引入jdk相应的版本的jar文件,以dregexp-1.0-jdk1.5.jar为例。引入到自己应用项目中。
步骤2. 需要打开DreamRegexpDemo.zip中找到dreamRegexp-rule.xml放到自己的应用程序的目录中,dreamRegexp-rule.xml文件定义了匹配的规则,具体将在编程规范中详细介绍。
步骤3. 建议在DreamRegexpDemo.zip中找到dreamRegexp-rule.xsd文件,放在与dreamRegexp-rule.xml同级的目录下。它可以帮助你校验匹配规则文件的合法性。
编程规范
1. 匹配规则匹配文件:dreamRegexp-rule.xml
dreamRegexp-rule.xml
根节点为<rule>,格式如下:
<rules xmlns="http://www.dream.org/dreamRegexp-rule" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dream.org/dreamRegexp-rule dreamRegexp-rule.xsd ">
<correcters>
<correcter><!-- 纠正器 -->
<name>
c1<!-- 声明 -->
</name>
<class>
demo.TestCorrecter<!-- 类全限定名 -->
</class>
</correcter>
</correcters>
<parsers><!-- 解析器 -->
<parser>
<name>
ps<!-- 解析器声明 -->
</name>
<class>
demo.TestParser<!-- 类全限定名 -->
</class>
</parser>
</parsers>
<correct-points>
<correct-point>
<name>
p1<!-- 纠正点声明 -->
</name>
<point>
1-1<!-- 出错点 -->
</point>
<ref-correcter>
c1<!-- 引入纠正器 -->
</ref-correcter>
</correct-point>
</correct-points>
<analyzerManager>
<analyzer>
<type>
regexp<!-- original|regexp -->
</type>
<pattern><![CDATA[<([^//s]*)>c*<//1>]]></pattern>
<!--
验证正则表达式
-->
<matcher><!-- 比较器 -->
<ref-correct-point>
p1<!-- 引入纠正点 -->
</ref-correct-point>
</matcher>
<ref-parser>
ps<!-- 引用解析器 -->
</ref-parser>
</analyzer>
</analyzerManager>
</rules>
其中<correcters>拥有多个纠正器<correcter>
<parsers>拥有多个解析器<parser>
<analyzerManager>拥有多个分析器<analyzer>,<analyzer>的type暂时只支持regexp,表示按照正则表达式规则,可以给不用给出type默认仍是regexp
<correct-points>拥有多个<correct-points>
<correct-point>引用一个<correcter>,其point表示安装点。如上例中1-1表示第一组的第一个比较块。
<analyzer>将引用一个<parser>,就是安装解析器。其matcher引用多个<correct-point>表示按照correct-point的point上安装纠正器.如上例中:引用p1的correct-point,其point表示第一组的第一个比较块,对应的也就是<([^//s]*)>c*<//1>的第一组的第一个比较块<
2. 结构规范
dreamRegexp要求使用者需要写Parser和Correcter的继承类,并且dreamRegexp-rule.xml中指向它们,如DreamRegexpDemo中使用的是子类TestParser和TestCorrecter。这些子类要求实现parse()和correct()方法来完成使用者的业务功能
下面对parse()和correct()方法返回做简单的介绍,具体参见API中的Parser与Correcter类(DreamRegexpDemo.zip下的doc)。
parse()返回值为boolean,表示是否继续扫描任务。使用者可以在某次正确匹配之后根据需要继续或终止对下文的扫描任务。
correcer()返回值为boolean,表示是否需要再次去原文比较,你可以可选的纠正了原文之后而不要求其一定满足当前的比较。
3. 代码规范
使用代码如下:
DreamRegexp dr=new DreamRegexp().configure("/demo/dreamRegexp-rule.xml");
dr.setArticle("<p>ccc</p>");
dr.doCorrect();
其中configure("/demo/dreamRegexp-rule.xml")为指定规则文件,若不指定将默认为项目目录下的dreamRegexp-rule.xml文件
dr.setArticle("<p>ccc</p>");为设定正文
dr.doCorrect();为开启执行任务
版权声明
本软件版权属原作者IDEAR,盗版必究。
任何个人或团体可以无偿使用,但必须注明原作者或出处