一、基本背景介绍
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
(1)给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
(2)可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
(1)灵活性、逻辑性和功能性非常强;
(2)可以迅速地用极简单的方式达到字符串的复杂控制。
我们要开发的是在使用正则表达式基础上,实现对代码进行匹配和更改并且进行批处理的软件,成功之后可以进行快速批量匹配和更改,大幅减少程序人员和测试人员的工作量。节约时间和人力成本。
由此看来开发一个可以对大段代码进行正则表达式进行批处理的匹配和删改的软件对于软件开发和测试来讲有着重要的意义。我在老师的指导下,开发基于far这一开源正则表达式变换软件有约束、受限和批处理功能的软件。
Far软件是一款开源正则表达式变换软件,可以实现对不同格式的文本文件的内容匹配与更改,但无法实现约束条件和批处理。我们的工作就是基于对far的删改和扩充。
本设计是基于开源网站source forge上的Find and Replace 2.0.2进行拓展和改写。
二、具体实现
1、原有FAR功能
(1)查找:可以查找用户指定目录下的,格式为*.txt、*.html、*.xml、\w{1,8}(\.\w{1,3})? 形式的文件。同时,也可以对加以限定内容或者内容符合对应正则表达式的以上各类格式的文件进行查找。
(2)替换:在查找到的文件的基础上,对文件的内容进行替换。可以对查找内容进行正则表达式查找以及对替换内容中对捕获组进行设定。
(3)更名:可以用正则表达式对文件名进行查找,同时支持选择文件的扩展模式(Protect、Include、Only)
2、拓展后FAR功能
(1)约束设置:基于正则表达式,对所有被查找的文件的内容进行有约束条件的筛查,将符合约束条件的文件再进行查找、替换、更名等操作。
(2)批替换:在原有替换功能基础之上,支持对满足不同条件的文件或内容进行批量替换,同时支持对所有进行批替换的文件进行约束设置。
(3)批更名:在原有更名功能基础之上,支持对满足不同条件的文件或内容进行批量更名,同时支持对所有进行批更名的文件进行约束设置。
三、 FARconditionchange类设计
条件约束功能由FARconditionchange类实现。FARconditionchange类主要实现文本内容的获取、对限制条件文本框内输入的约束条件进行捕获、获取捕获组内容、条件判断语句的实现等功能。获取文本内容、限制条件约束框内条件约束语句字符串是实现条件约束功能的先决条件,条件判断语句是条件约束功能的依据。条件约束功能的执行流程图如下图3.7所示:
图3.7条件约束功能流程图
1、条件判断语句的设计
条件判断语句主要是通过比较不同捕获组之间的关系来实现的。所以条件约束功能的本质就是不同捕获组之间的关系,以及不同捕获组关系之间的逻辑关系。条件约束功能是本设计的重中之重。本节将介绍本设计的16个条件关系。它们可以单独使用表示两个捕获组之间的关系,也可以组合使用,表示关系与关系之间的逻辑关系。具体如下表3.5所示:
表3.5条件判断符号表
符号 |
名称 |
功能 |
返回值类型 |
$ |
标识符 |
Group的标识符 |
无 |
== |
相等 |
判断两个或者两个以上Group之间相等 |
Boolean型 |
= |
等于 |
判断一个Group或多个Group是否等于外设字符串 |
Boolean型 |
; |
分号 |
判断条件语句是否结束 |
无 |
l== |
长度相等 |
判断两个或者两个以上的Group长度是否相等 |
Boolean型 |
l= |
长度等于 |
判断一个或多个Group的长度是否等于一个外设整数 |
Boolean型 |
S== |
特殊位置相等 |
判断两个或两个以上的Group的特定位置的字符是否相等 |
Boolean型 |
S= |
特殊位置等于 |
判断一个或多个Group的特定位置是否等于一个特定外设字符 |
Boolean型 |
+ |
加 |
将两个Group的内容相加 |
String型 |
( |
左括号 |
圈定处理范围、设定优先级 |
无 |
) |
右括号 |
括号结束 |
无 |
[ |
左中括号 |
区分是否是一个含有空格的字符串元素 |
无 |
] |
右中括号 |