一种正则表达式检测方法、装置及计算机可读存储介质与流程

文档序号:20186509发布日期:2020-03-27 19:08阅读:120来源:国知局
一种正则表达式检测方法、装置及计算机可读存储介质与流程

本申请涉及电子技术领域,尤其涉及一种正则表达式检测方法、装置及计算机可读存储介质。



背景技术:

正则表达式是用某种已知模式去匹配一类字符串的一个字符串公式,它主要用来作为描述字符串匹配的工具。正则表达式具有很强的表达能力,它是由一些普通字符(例如字符a到z)和一些元字符(metacharacters)组成的,在例如文字过滤以及审核等业务中扮演着较为重要的角色。

正则表达式的编写需要具备较为丰富的专业知识和经验,在实际应用中经常会出现编写的正则表达式存在缺陷的问题,而在实际业务中采用有缺陷的正则表达式则可能会导致业务出错,例如业务处理效率显著降低甚至业务失败。基于此,目前会在开发人员完成正则表达式的编写之后,会对正则表达式进行问题排查,也即由专门的测试人员在做白盒审计时将正则表达式提取出来,使用测试用例来测试正则表达式是否规范,但是由于这种方式完全依赖于人工来进行,导致测试的效率和准确性较为局限。



技术实现要素:

本申请实施例提供了一种正则表达式检测方法、装置及计算机可读存储介质,至少能够解决相关技术中由专门的测试人员对正则表达式进行人工检测,所导致的测试效率和测试准确性较为局限的问题。

本申请实施例第一方面提供了一种正则表达式检测方法,包括:

基于待检测文件路径读取待检测文件内容;

从所述待检测文件内容中提取目标正则表达式;

基于预设的正则表达式测试规则,对所述目标正则表达式进行编写准确度检测。

本申请实施例第二方面提供了一种正则表达式检测装置,包括:

读取模块,用于基于待检测文件路径读取待检测文件内容;

提取模块,用于从所述待检测文件内容中提取目标正则表达式;

检测模块,用于基于预设的正则表达式测试规则,对所述目标正则表达式进行编写准确度检测。

本申请实施例第三方面提供了一种电子装置,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述本申请实施例第一方面提供的正则表达式检测方法中的各步骤。

本申请实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现上述本申请实施例第一方面提供的正则表达式检测方法中的各步骤。

由上可见,根据本申请方案所提供的正则表达式检测方法、装置及计算机可读存储介质,基于待检测文件路径读取待检测文件内容;从待检测文件内容中提取目标正则表达式;基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测。通过本申请方案的实施,采用自动化方式对正则表达式进行编写准确度检测,有效提高了对正则表达式进行问题排查的测试效率和测试准确性。

附图说明

图1为本申请第一实施例提供的正则表达式检测方法的基本流程示意图;

图2为本申请第一实施例提供的一种基于nfa的文本匹配示意图;

图3为本申请第一实施例提供的一种编写准确度检测方法的流程示意图;

图4为本申请第一实施例提供的另一种编写准确度检测方法的流程示意图;

图5为本申请第一实施例提供的检测结果展示界面的示意图;

图6为本申请第二实施例提供的正则表达式检测方法的细化流程示意图;

图7为本申请第三实施例提供的一种正则表达式检测装置的程序模块示意图;

图8为本申请第三实施例提供的另一种正则表达式检测装置的程序模块示意图;

图9为本申请第四实施例提供的电子装置的结构示意图。

具体实施方式

为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为了解决相关技术中由专门的测试人员对正则表达式进行人工检测,所导致的测试效率和测试准确性较为局限的技术问题,本申请第一实施例提供了一种正则表达式检测方法,如图1为本实施例提供的正则表达式检测方法的基本流程图,该正则表达式检测方法包括以下的步骤:

步骤101、基于待检测文件路径读取待检测文件内容。

具体的,在本实施例中,测试人员可以对特定的本地文件或本地文件夹进行检测,其中,在测试人员打开路径之后,进行判断,若是单独的文件,则可直接按照文件路径对该文件进行读取,而若是一个文件夹,则可以递归逐层读取文件夹中所有文件的路径,然后再按照所读取的所有文件路径进行文件夹内文件的内容读取。

在本实施例一种可选的实施方式中,在基于待检测文件路径读取待检测文件内容之前,还包括:判断当前的文件属性是否满足预设的检测触发条件;若是,则执行基于待检测文件路径读取待检测文件内容的步骤。

具体的,在本实施例中,基于本地的文件属性进行是否满足触发本实施例的正则表达式检测流程的判断,仅在满足判断条件的情况下才触发上述步骤101,以提升正则表达式检测的智能性,在一定程度上可有效节省终端的处理性能。

步骤102、从待检测文件内容中提取目标正则表达式。

具体的,在本实施例中,正则表达式(regex,regularexpression)用于实现对文本中的数据进行匹配校验,在实际应用中,当编写校验的正则表达式存在缺陷或者不严谨时,攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止,其中一种典型的攻击方式为正则表达式拒绝服务攻击(redos)。

而正则表达式引擎则是实现正则表达式功能的功能实现载体,将正则表达式编译为有限状态自动机,然后采用有限状态自动机来对待匹配文本进行匹配。其中,在编译正则表达式时,可以采用汤普森构造算法将正则表达式编译为非确定性有限状态自动机dfa,也可以是采用powersetconstruction算法将正则表达式编译为确定性有限状态自动机nfa。

应当说明的是,两类引擎要顺利工作,都必须有一个正则表达式和一个文本串,一个捏在手里,一个吃下去。dfa捏着文本串去比较正则式,看到一个子正则式,就把可能的匹配串全标注出来,然后再看正则式的下一个部分,根据新的匹配结果更新标注。而nfa是捏着正则式去比文本,吃掉一个字符,就把它跟正则式比较,匹配就记下来:“某年某月某日在某处匹配上了!”,然后接着往下干。一旦不匹配,就把刚吃的这个字符吐出来,一个个的吐,直到回到上一次匹配的地方。

本实施例下面以一个具体例子对上述两类引擎的工作原理进行详细说明。现在有个文本为:perlmanbook,一个正则表达式为/perl|perlman/,在使用nfa进行匹配时,第一个子正则表达式为/perl/,而该引擎针对perlmanbook字符串进行扫描,从左开始,当进度进行到perlmanbook的时候,最开始部分的perl已经和第一个子正则表达式匹配上,而当引擎进度扫描到m字符的时候,发现与第一个子正则表达式不匹配,于是把m吐出来,向上汇报已成功匹配perl,而不再关心其它,也不尝试第二个子正则表达式/perlman/。而若在dfa引擎的情况下,它是以文本为导向,针对正则表达式从左开始进行扫描,当扫描到/p/的时候,发现匹配上了,然后继续往下匹配,当将第一个子正则表达式/perl/全部匹配上之后,这时候就会把这个子正则表达式甩开,去匹配第二个子正则表达式的/p/,直到把正则表达式的所有子正则表达式匹配完,才会输出成功匹配'perlman'。

由此可见,两个引擎其实存在本质上的差别:dfa对于文本串里的每一个字符只需扫描一次,比较快,但特性较少;而nfa则要翻来覆去吃字符、吐字符,速度慢,但是特性丰富,所以反而应用广泛,当今主要的正则表达式引擎,如perl、ruby、python的re模块、java和.net的regex库,都是nfa的,如图2所示为本实施例提供的一种基于nfa的文本匹配示意图,所用的正则表达式为(a|b)*abb。而在实际应用中,nfa可能会陷入递归调用的陷阱而表现得性能极差,造成redos问题。

步骤103、基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测。

具体的,在本实施例中,只需要将待排查的文件路径输入,等待结果即可,达到自动化检测省时省力的目的。采取基于自动化的技术排查,由于测试活动中正则表达式的排查一直算是比较麻烦的一块,人工的排查费时费力,通过自动化以后,可以不停的添加新的规则,使方案最终投入使用时节省时间,提高效率。在实际应用中,redos的判断规则可进行持续更新和完善,以进一步提高正则表达式的准确度检测的准确性。应当理解的是,本实施例的编写准确度可以为具体的准确度数值,也可以仅包括编写准确和编写不准确两种表现形式。

在本实施例一种可选的实施方式中,正则表达式测试规则为标准语法规则,基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测包括:基于预设的标准语法规则,对目标正则表达式进行语法分析;基于语法分析结果检测目标正则表达式的编写准确度。

具体的,在本实施例中,基于正则表达式的书写规范得到正则表达式的编写规则定义,例如字符位置、字符间关系、字符数量等,本实施例基于标准规则对正则表达式进行语法分析,通过正则表达式的语法正确度来关联其编写准确度。

如图3所示为本实施例提供的一种编写准确度检测方法的流程示意图,在本实施例一种可选的实施方式中,正则表达式测试规则包括正则表达式拆分子规则和正则表达式检测子规则,基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测具体包括以下步骤:

步骤301、基于正则表达式拆分子规则将目标正则表达式拆分为多个目标子正则表达式;

步骤302、基于正则表达式检测子规则对多个目标子正则表达式进行检测;

步骤303、通过检测结果确定目标正则表达式的编写准确度。

具体的,本实施例将各正则表达式拆分成多个子正则表达式,并基于子正则表达式的检测结果来确定正则表达式的编写准确度。一方面,将正则表达式的编写准确度评价细分至各子正则表达式,检测结果对细节的把握更强,从而可以有效提高检测准确性;另一方面,在实际应用中,正则表达式的复杂度有所不同,对于部分相对复杂的正则表达式,全局进行编写准确度检测可能会耗费终端较多的处理性能,且对检测效率也有较大影响,而拆分至子正则表达式进行检测,则允许将正则表达式进行阶段性检测,例如可以在检测部分子正则表达式,将这部分子正则表达式的检测结果直接作为整个正则表达式的编写准确度检测结果。

在本实施例一种可选的实施方式中,基于正则表达式检测子规则对多个目标子正则表达式进行检测包括:基于正则表达式检测子规则,在预设的检测规模下对多个目标子正则表达式进行检测。

具体的,本实施例出于检测效率、检测结果的准确性等多方面的综合考虑,在正则表达式中选择特定检测规模的子正则表达式进行检测。

在实际应用中,在预设的检测规模下对多个目标子正则表达式进行检测包括但不限于以下两种方式:

方式一,从多个目标子正则表达式中选取预设数量的目标子正则表达式进行检测。

具体的,本实施例可以从拆分出的所有子正则表达式中选择预设数量的子正则表达式进行检测,这里的选择方式可以采用随机选择方式,或者顺序选择方式,在此不作唯一限定。

方式二,从多个目标子正则表达式中,选取检测优先级高于预设的优先级阈值的目标子正则表达式进行检测。

具体的,在本实施例中,考虑到不同的子正则表达式在整个正则表达式中所起的重要性有所不同,其中,重要性强的子正则表达式对整个正则表达式的文本匹配检测功能影响较大,应当是检测重点。应当理解的是,本实施例中的检测优先级正相关于子正则表达式的重要性。

如图4所示为本实施例提供的另一种编写准确度检测方法的流程示意图,在本实施例一种可选的实施方式中,基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测具体包括以下步骤:

步骤401、获取目标正则表达式所对应的业务所产生的目标文本数据;

步骤402、基于目标文本数据对目标正则表达式进行匹配;

步骤403、基于匹配结果检测目标正则表达式的编写准确度。

具体的,在本实施例中,还可以将对应于正则表达式的业务数据作为测试用例,来对正则表达式进行排查,具体排查方式则是通过正则表达式对文本数据进行匹配,通过匹配度来表征正则表达式的编写准确度。应当理解的是,在实际应用中,为了提高正则表达式的检测准确性,可以尽可能的提高文本数据的规模。

在本实施例一种可选的实施方式中,在基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测之后,还包括:将编写准确度低于预设的准确度阈值的目标正则表达式,确定为问题正则表达式;对问题正则表达式,以及对应于问题正则表达式的文件路径进行输出。

具体的,本实施例在完成正则表达式的检测之后,还对问题正则表达式输出提示,具体输出内容包括问题正则表达式所对应的文件路径以及该正则表达式本身,以有效指示开发人员对正则表达式进行修正,提高开发人员的工作效率。在实际应用中,提示输出方式可以为显示输出,具体请参阅如图5所示的本实施例的检测结果展示界面的示意图,在界面上对正则表达式具体内容和路径进行展示。

此外,还应当说明的是,在本实施例中还可以在确定问题正则表达式之后,基于标准编写规则确定推荐补正数据,然后在接收到外部针对推荐补正数据输入的确认补正指令时,基于推荐补正数据对问题正则表达式进行自动补正,以进一步简化开发人员的操作。

基于上述本申请实施例的技术方案,基于待检测文件路径读取待检测文件内容;从待检测文件内容中提取目标正则表达式;基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测。通过本申请方案的实施,采用自动化方式对正则表达式进行编写准确度检测,有效提高了对正则表达式进行问题排查的测试效率和测试准确性。

图6中的方法为本申请第二实施例提供的一种细化的正则表达式检测方法,该正则表达式检测方法包括:

步骤601、基于待检测文件路径读取待检测文件内容。

应当说明的是,若对本地文件夹进行检测,则可以递归逐层读取文件夹中所有文件的路径,然后再按照所读取的所有文件路径进行文件夹内文件的内容读取。

步骤602、从待检测文件内容中提取目标正则表达式。

具体的,正则表达式(regex,regularexpression)用于实现对文本中的数据进行匹配校验,在实际应用中,当编写校验的正则表达式存在缺陷或者不严谨时,攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。

步骤603、基于预设的正则表达式拆分规则将目标正则表达式拆分为多个目标子正则表达式。

本实施例将各正则表达式拆分成多个子正则表达式,并基于子正则表达式的检测结果来确定正则表达式的编写准确度。

步骤604、从多个目标子正则表达式中,选取检测优先级高于预设的优先级阈值的目标子正则表达式。

步骤605、基于预设的正则表达式检测规则,对所选取的目标子正则表达式进行检测。

在本实施例中,考虑到不同的子正则表达式在整个正则表达式中所起的重要性有所不同,其中,重要性强的子正则表达式对整个正则表达式的文本匹配检测功能影响较大,应当是检测重点。应当理解的是,本实施例中的检测优先级正相关于子正则表达式的重要性。

步骤606、通过检测结果确定目标正则表达式的编写准确度。

在本实施例中,只需要将待排查的文件路径输入,等待结果即可,达到自动化检测省时省力的目的。并且,通过自动化以后,可以不停的添加新的规则,使方案最终投入使用时节省时间,提高效率

步骤607、将编写准确度低于预设的准确度阈值的目标正则表达式,确定为问题正则表达式。

步骤608、对问题正则表达式,以及对应于问题正则表达式的文件路径进行输出。

本实施例在完成正则表达式的检测之后,还对问题正则表达式输出提示,具体输出内容包括问题正则表达式所对应的文件路径以及该正则表达式本身,以有效指示开发人员对正则表达式进行修正,提高开发人员的工作效率。

应当理解的是,本实施例中各步骤的序号的大小并不意味着步骤执行顺序的先后,各步骤的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成唯一限定。

本申请实施例公开了一种正则表达式检测方法,基于待检测文件路径读取待检测文件内容;从待检测文件内容中提取目标正则表达式;基于预设的正则表达式拆分规则将目标正则表达式拆分为多个目标子正则表达式;基于预设的正则表达式检测规则,对所选取的检测优先级高于预设的优先级阈值的目标子正则表达式进行检测,并通过检测结果确定目标正则表达式的编写准确度;将编写准确度低于预设的准确度阈值的目标正则表达式,确定为问题正则表达式,并对问题正则表达式,以及对应于问题正则表达式的文件路径进行输出。通过本申请方案的实施,采用自动化方式对正则表达式进行编写准确度检测,有效提高了对正则表达式进行问题排查的测试效率和测试准确性,并对问题正则表达式输出提示,提高了开发人员的工作效率。

图7为本申请第三实施例提供的一种正则表达式检测装置。该正则表达式检测装置可用于实现前述实施例中的正则表达式检测方法。如图7所示,该正则表达式检测装置主要包括:

读取模块701,用于基于待检测文件路径读取待检测文件内容;

提取模块702,用于从待检测文件内容中提取目标正则表达式;

检测模块703,用于基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测。

在本实施例一种可选的实施方式中,正则表达式测试规则为标准语法规则,检测模块703具体用于:基于预设的标准语法规则,对目标正则表达式进行语法分析;基于语法分析结果检测目标正则表达式的编写准确度。

在本实施例一种可选的实施方式中,正则表达式测试规则包括正则表达式拆分子规则和正则表达式检测子规则,检测模块703具体用于:基于正则表达式拆分子规则将目标正则表达式拆分为多个目标子正则表达式;基于正则表达式检测子规则对多个目标子正则表达式进行检测;通过检测结果确定目标正则表达式的编写准确度。

进一步地,在本实施例一种可选的实施方式中,检测模块703在基于正则表达式检测子规则对多个目标子正则表达式进行检测时,具体用于:基于正则表达式检测子规则,在预设的检测规模下对多个目标子正则表达式进行检测。

更进一步地,在本实施例一种可选的实施方式中,检测模块703在预设的检测规模下对多个目标子正则表达式进行检测时,具体用于:从多个目标子正则表达式中选取预设数量的目标子正则表达式进行检测;或,从多个目标子正则表达式中,选取检测优先级高于预设的优先级阈值的目标子正则表达式进行检测。

在本实施例一种可选的实施方式中,检测模块703具体用于:获取目标正则表达式所对应的业务所产生的目标文本数据;基于目标文本数据对目标正则表达式进行匹配;基于匹配结果检测目标正则表达式的编写准确度。

如图8所示为本实施例提供的另一种正则表达式检测装置,在本实施例一种可选的实施方式中,正则表达式检测装置还包括:确定模块704和输出模块705,其中,确定模块704用于在基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测之后,将编写准确度低于预设的准确度阈值的目标正则表达式,确定为问题正则表达式;输出模块705用于对问题正则表达式,以及对应于问题正则表达式的文件路径进行输出。

应当说明的是,第一、二实施例中的正则表达式检测方法均可基于本实施例提供的正则表达式检测装置实现,所属领域的普通技术人员可以清楚的了解到,为描述的方便和简洁,本实施例中所描述的正则表达式检测装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

根据本实施例所提供的正则表达式检测装置,基于待检测文件路径读取待检测文件内容;从待检测文件内容中提取目标正则表达式;基于预设的正则表达式测试规则,对目标正则表达式进行编写准确度检测。通过本申请方案的实施,采用自动化方式对正则表达式进行编写准确度检测,有效提高了对正则表达式进行问题排查的测试效率和测试准确性。

请参阅图9,图9为本申请第四实施例提供的一种电子装置。该电子装置可用于实现前述实施例中的正则表达式检测方法。如图9所示,该电子装置主要包括:

存储器901、处理器902、总线903及存储在存储器901上并可在处理器902上运行的计算机程序,存储器901和处理器902通过总线903连接。处理器902执行该计算机程序时,实现前述实施例中的正则表达式检测方法。其中,处理器的数量可以是一个或多个。

存储器901可以是高速随机存取记忆体(ram,randomaccessmemory)存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。存储器901用于存储可执行程序代码,处理器902与存储器901耦合。

进一步的,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的电子装置中,该计算机可读存储介质可以是前述图9所示实施例中的存储器。

该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现前述实施例中的正则表达式检测方法。进一步的,该计算机可存储介质还可以是u盘、移动硬盘、只读存储器(rom,read-onlymemory)、ram、磁碟或者光盘等各种可以存储程序代码的介质。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的可读存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上为对本申请所提供的正则表达式检测方法、装置及计算机可读存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1