CN102929596A - 代码排查方法和相关装置 - Google Patents
代码排查方法和相关装置 Download PDFInfo
- Publication number
- CN102929596A CN102929596A CN2012103553303A CN201210355330A CN102929596A CN 102929596 A CN102929596 A CN 102929596A CN 2012103553303 A CN2012103553303 A CN 2012103553303A CN 201210355330 A CN201210355330 A CN 201210355330A CN 102929596 A CN102929596 A CN 102929596A
- Authority
- CN
- China
- Prior art keywords
- regular expression
- format code
- standard format
- code segment
- formation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种代码排查方法和相关装置。本发明实施例中利用包括多行正则表达式的正则表达式队列来匹配标准格式代码段,且某行正则表达式的匹配结果可能影响到后续另一行正则表达式的匹配,由于是通过多行正则表达式组合匹配,有利于实现更多更复杂逻辑的匹配,进而有利于提高复杂规则代码的匹配排查能力。
Description
技术领域
本发明涉及数据处理领域,具体涉及代码排查方法和相关装置。
背景技术
现行大型软件一般都有自己的代码库,其中代码都以百万行计。这样的航母级软件,软件质量和可靠性非常重要。例如当在进行某些维护时发现特定编码方式存在软件bug,此时对海量代码排查就成了必须要做的工作,而人工排查费时费力,且不可保证排查是否干净。
目前对例如C++代码等排查的工具虽比较多(如Lint、Coverity等),但现有工具都是通过分析语法树,利用单行正则表达式来对已知通用的C++规则进行排查,现有方式难以对较复杂规则代码进行匹配排查,使得应用场景受到诸多限制。
发明内容
本发明实施例提供一种代码排查方法和相关装置,以期提高对较复杂规则代码的匹配排查能力。
本发明第一方面提供一种代码排查方法,可包括:
利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配;
若所述正则表达式队列中的第m行正则表达式未成功匹配到所述标准格式代码段中的第n行标准格式代码,且所述n+y小于或等于N且大于0,则利用所述正则表达式队列中的第m行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配;
若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用所述正则表达式队列中的第m+x行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配;
其中,所述x和y为非零整数,所述x和/或y为可变值或者固定值,所述标准格式代码段包括N行标准格式代码,所述正则表达式队列包括M行正则表达式,所述M、N、m和n为正整数,所述M和N大于1,0<m≤M,0<n≤N;
若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果。
在第一方面的第一种可能的实现方式中,所述若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果,包括:
若所述正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数,则输出匹配结果为所述标准格式代码段被所述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数,但所述n+y小于0或大于所述N,则输出匹配结果为所述标准格式代码段与所述正则表达式队列匹配失败。
在第一方面的第二种可能的实现方式中,所述若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果,包括:若所述正则表达式队列中的每行正则表达式均被成功匹配了至少1次,则输出匹配结果为所述标准格式代码段被所述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配至少1次,但所述n+y小于0或者大于所述N,则输出匹配结果为所述标准格式代码段与所述正则表达式队列匹配失败。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在所述利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配的步骤之前,所述方法还包括:
获取源代码段;
将获取的源代码段进行格式标准化处理以得到标准格式代码段。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述将获取的源代码段进行格式标准化处理得到标准格式代码段包括:去除获取的源代码段中的注释、换行和/或连续多个空格以得到标准格式代码段。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式或第一方面的第三种可能的实现方式或第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用所述正则表达式队列中的第m+x行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配,包括:
若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x或等于小于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用在所述第n行标准格式代码成功匹配到的字符串,对所述正则表达式队列中的第m+x行正则表达式中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对所述标准格式代码段中的第n+y行标准格式代码进行匹配。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式或第一方面的第三种可能的实现方式或第一方面的第四种可能的实现方式或第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述正则表达式队列中的至少两行正则表达式相同,或者,所述正则表达式队列中的任意两行正则表达式均不相同。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式或第一方面的第三种可能的实现方式或第一方面的第四种可能的实现方式或第一方面的第五种可能的实现方式或第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述x和/或y等于1。
本发明第二方面提供一种代码排查设备,可包括:
第一匹配单元,用于利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配,其中,所述正则表达式队列包括M行正则表达式,所述标准格式代码段包括N行标准格式代码,所述M、N、m和n为正整数,所述M和N大于1,0<m≤M,0<n≤N;
判断单元,用于确定所述第一匹配单元利用正则表达式队列中的第m行正则表达式是否成功匹配标准格式代码段中的第n行标准格式代码;
第二匹配单元,用于若所述判断单元确定出所述匹配单元利用所述正则表达式队列中的第m行正则表达式未成功匹配到所述标准格式代码段中的第n行标准格式代码,且所述n+y小于或等于N且大于0,则利用所述正则表达式队列中的第m行正则表达式对所述标准格式代码段中的第n+y行标准格式代码进行匹配;
第三匹配单元,用于若所述判断单元确定出所述匹配单元利用若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用所述正则表达式队列中的第m+x行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配;其中,所述x和y为非零整数,所述x和/或y为可变值或者固定值;
匹配结果输出单元,用于若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果。
在第二方面的第一种可能的实现方式中,所述匹配结果输出单元具体用于,若所述正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数,则输出匹配结果为所述标准格式代码段被所述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数,但所述n+y小于0或大于所述N,则输出匹配结果为所述标准格式代码段与所述正则表达式队列匹配失败。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述代码排查设备还包括:
获取单元,用于获取源代码段;将获取的源代码段进行格式标准化处理以得到标准格式代码段。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述第三匹配单元具体用于:若所述判断单元确定出所述匹配单元利用若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用在所述第n行标准格式代码成功匹配到的字符串,对所述正则表达式队列中的第m+x行正则表达式中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对所述标准格式代码段中的第n+y行标准格式代码进行匹配。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式或第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述x和/或y等于1。
由上可见,本发明实施例中利用包括多行正则表达式的正则表达式队列来匹配标准格式代码段,且某行正则表达式的匹配结果可能影响到后续另一行正则表达式的匹配,由于是通过多行正则表达式组合匹配,有利于实现更多更复杂逻辑的匹配,进而有利于提高复杂规则代码的匹配排查能力。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明实施例提供的一种代码排查方法的流程示意图;
图2是本发明实施例提供的另一种代码排查方法的流程示意图;
图3-a是本发明实施例提供的一种正则表达式队列和标准格式代码段的示意图;
图3-b本发明实施例提供的正则表达式队列与标准格式代码段的一种匹配方式的示意图;
图3-c本发明实施例提供的正则表达式队列与标准格式代码段的另一种匹配方式的示意图;
图3-d本发明实施例提供的正则表达式队列与标准格式代码段的另一种匹配方式的示意图;
图4-a是本发明实施例提供的一种代码排查设备的示意图;
图4-b是本发明实施例提供的又一种代码排查设备的示意图;
图5是本发明实施例提供的另一种代码排查设备的示意图。
具体实施方式
本发明实施例提供一种代码排查方法和相关装置,以期提高对较复杂规则代码的匹配排查能力。
下面通过实施例进行具体介绍。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。术语“和/或”包含所列项目的一个或多个的所有可能的组合,例如A和/或B,包含A、B以及A和B三种情况。
本发明代码排查方法的一个实施例,可包括:利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配;若该正则表达式队列中的第m行正则表达式未成功匹配到该标准格式代码段中的第n行标准格式代码,且该n+y小于或等于N且大于0,则利用该正则表达式队列中的第m行正则表达式对该标准格式代码段中的第n+y行标准格式代码进行匹配;若该正则表达式队列中的第m行正则表达式成功匹配到了该标准格式代码段中的第n行标准格式代码,且该m+x小于或等于M且大于0,且该n+y大于0且小于或等于该N,则利用该正则表达式队列中的第m+x行正则表达式,对该标准格式代码段中的第n+y行标准格式代码进行匹配;其中,该x和y为非零整数,该x和/或y为可变值或固定值,该标准格式代码段共包括N行标准格式代码,该正则表达式队列共包括M行正则表达式,上述M、N、m和n为正整数,上述M和N大于1,0<m≤M,0<n≤N;若满足设定的匹配停止条件,则输出上述正则表达式队列与上述标准格式代码段的匹配结果。
参见图1,本发明实施例提供一种代码排查方法,可包括以下内容:
101、利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配,其中,该标准格式代码段共包括N行标准格式代码,该正则表达式队列包括M行正则表达式,该M、N、m和n为正整数,该M和N大于1,0<m≤M,0<n≤N。
在实际应用中,正则表达式队列中的正则表达式例如可包括:PERL兼容的正则表达式(PCRE,Perl Compatible Regular Expressions)、可移植操作系统接口(POSIX,Portable Operating System Interface of Unix)正则表达式或其它类型的正则表达式。在本发明一些实施例中,可将正则表达式队列看做是代码规则匹配窗(CRW,Code Rule Window)。
在本发明的一些实施例中,上述正则表达式队列中的任意两行正则表达式均不相同;或者,上述正则表达式队列中的至少两行正则表达式相同,即正则表达式队列中部分行正则表达式相同,举例来说,正则表达式队列中的第1行和第4行相同,和/或第3行和第8行相同,和/或第2行、5行和第7行相同,以此类推。
102、若上述正则表达式队列中的第m行正则表达式未成功匹配到该标准格式代码段中的第n行标准格式代码,且n+y小于或等于N且大于0,则利用该正则表达式队列中的第m行正则表达式,对该标准格式代码段中的第n+y行标准格式代码进行匹配。
103、若上述正则表达式队列中的第m行正则表达式成功匹配到了该标准格式代码段中的第n行标准格式代码,且该m+x小于或等于M且大于0,且该n+y大于0且小于或等于该N,则利用该正则表达式队列中的第m+x行正则表达式,对该标准格式代码段中的第n+y行标准格式代码进行匹配。
其中,上述x和y为非零整数,该x和/或y为可变值或固定值。
在本发明的一些实施例中,若x和/或y为可变值,则x和/或y可随着某些条件而不断变化,例如,x可在k和-k之间变化,其中,k为非零整数,k例如可等于1、2、3、4或其它非零整数;又例如,x也可不断的递增或者递减,如x的递增趋势可以是x=x+a,即每次x的取值都在其上一次取值的基础上加a,其中,a为非零整数,a例如可等于1、2、3、4、-1、-2、-3、-4或其它非零整数。当然x也可按照其它方式进行变化,若y为可变值,则y的变化趋势可与之类似。若x和/或y为固定值,则x和/或y例如可等于1、2、3、4、-1、-2、-3、-4或其它非零整数。
104、若满足设定的匹配停止条件,则输出上述正则表达式队列与上述标准格式代码段的匹配结果。
在实际应用中,正则表达式队列中的正则表达式所描述的逻辑运算例如可包括如下逻辑运算的一种或多种:赋值、加、减、乘、除、等于、不等于、大于、大于等于、小于、小于等于、逻辑或、逻辑与、按位与、按位或、非、取反、异或、左移位、右移位等等。
在本发明的一些实施例中,若满足设定的匹配停止条件,则输出正则表达式队列与标准格式代码段的匹配结果,可包括:若正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数(例如至少1次或至少2次),则输出匹配结果为标准格式代码段被正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数(例如至少1次或至少2次),但上述n+y小于0或大于N,则输出匹配结果为标准格式代码段与正则表达式队列匹配失败。
在本发明的一些实施例中,假设x和y等于1,且正则表达式队列中的每行正则表达式只需成功匹配1次,则例如,若正则表达式队列中的第m行正则表达式成功匹配到了标准格式代码段中的第n行标准格式代码,且m等于M(其中,m等于M,表示正则表达式队列中的每行正则表达式均被成功匹配了至少1次),则输出匹配结果可为正则表达式队列与标准格式代码段成功匹配。又例如,若正则表达式队列中的第m行正则表达式成功匹配到了标准格式代码段中的第n行标准格式代码,且m小于M(其中,m小于M,表示正则表达式队列中的至少有1行正则表达式未被成功匹配至少1次),但n等于N(其中,n等于N表示标准格式代码段的每行标准格式代码段均已被匹配过);则可确定正则表达式队列与标准格式代码段匹配失败。又例如,若正则表达式队列中的第m行正则表达式未成功匹配到标准格式代码中的第n行标准格式代码,且n等于N,则确定上述正则表达式队列与上述标准格式代码匹配失败。对于x和y等于其它非零整数的情况可以此类推;对于正则表达式队列中的部分或全部行正则表达式需成功匹配多次的情况,亦可以此类推。
在本发明的一些实施例中,标准格式代码段的获取方式可包括:获取源代码段;将获取的源代码段进行格式标准化处理以得到标准格式代码段。例如可去除获取到的源代码段中的注释、换行和/或连续多个空格以得到标准格式代码段。此外,若源代码段已经是标准格式的,则直接可将源代码段作为标准格式代码段。源代码进行格式标准化处理的目的之一是,便于与正则表达式进行匹配而不受非代码内容影响。
在本发明的一些实施例中,利用上述正则表达式队列中的第m+x行正则表达式,对上述标准格式代码段中的第n+y行标准格式代码进行匹配可包括:利用在第n行标准格式代码中成功匹配到字符串,对上述正则表达式队列中的第m+x行中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对上述标准格式代码段中的第n+y行标准格式代码进行匹配。其中,通过在正则表达式引入变量,并根据匹配情况对变量进行赋值,这样有利于进一步增强正则表达式队列对复杂关系(例如函数关系、变量关系)的匹配能力。
由上可见,本实施例中利用包括多行正则表达式的正则表达式队列来匹配标准格式代码段,且某行正则表达式的匹配结果可能影响到后续另一行正则表达式的匹配,由于是通过多行正则表达式组合匹配,有利于实现更多更复杂逻辑的匹配,进而有利于提高复杂规则代码的匹配排查能力。
进一步的,通过增加正则表达式队列的各行正则表达式的耦合关系,在正则表达式引入变量,有利于进一步增强正则表达式队列对复杂逻辑关系的匹配能力。
为便于更好的理解和实施本发明实施例的上述方案,下面通过一个具体的应用场景为例进行具体说明。举例场景下,假设标准格式代码段共包括N行标准格式代码,正则表达式队列共包括M行正则表达式,M、N为正整数,M和N大于1。
参见图2,本发明实施例提供的另一种代码排查方法,可包括以下内容:
201、令m=1;令n=1;令x=1;令y=1;执行步骤202;
202、利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配;执行步骤203;
203、判断正则表达式队列中的第m行正则表达式是否成功匹配到标准格式代码段中的第n行标准格式代码;
若是,则执行步骤204;若否,则执行步骤206。
204、令m=m+x,令n=n+y,执行步骤205;
205、判断m是否小于或等于M,且n是否小于或等于N;
若m小于或等于M,且n小于或等于N,则执行步骤202;
若m小于或等于M,且n大于N,则执行步骤209;
若m大于M,且n小于或等于N,则执行步骤208;
若m大于M,且n大于N,则执行步骤208;
206、令n=n+y,执行步骤207;
207、判断n是否小于或等于N;
若是,则执行步骤202、若否,则执行步骤209。
208、输出匹配结果为正则表达式队列与标准格式代码段匹配成功;
209、输出匹配结果为正则表达式队列与标准格式代码段匹配失败。
可以理解,上述应用场景举例是以x和y等于1为例进行描述的,而x和/或y为其它值或可变值的情况可以此类推,此处不再一一举例。
参见图3-a~图3-d,图3-a~图3-d通过图形举例说明正则表达式队列与标准格式代码段的一种匹配方式。其中,图3-a示出了包括N行标准格式代码的标准格式代码段和包括M行正则表达式的正则表达式队列。图3-b示出,将正则表达式队列中的第1行正则表达式和标准格式代码段的第1行标准格式代码进行匹配;图3-c示出,正则表达式队列中的第1行正则表达式和标准格式代码段的第1行标准格式代码匹配失败后,将正则表达式队列中的第1行正则表达式和标准格式代码段的第2行标准格式代码进行匹配;图3-d示出,正则表达式队列中的第1行正则表达式和标准格式代码段的第1行标准格式代码匹配成功后,将正则表达式队列中的第3行正则表达式和标准格式代码段的第2行标准格式代码进行匹配。
下面通过一些具体应用例进行举例说明。
本发明实施例提出的正则表达式队列包括多行正则表达式。各行正则表达式之间可以是弹性的,匹配的代码行数可以跳跃,并且上一行的匹配结果可影响下一行的匹配行为。
例如,有一段用于获取消息列表并逐一处理的C++代码,要求是找出是否存在调用getAllMsg函数传入了MsgList对象的代码,另外,如果传入的参数是其它类型对象则忽略(C++函数可以重载参数类型)。正则表达式队列的规则示意可如下:
先通过正则表达式队列的第1行正则表达式遍历C++代码,查找是否存在MsgList的对象定义代码,若找不到则终止匹配,否则,记录下定义的对象名称msglist,并继续利用第2行正则表达式继续匹配。其中,第2行正则表达式的规则示意例如可为,从第1行正则表达式成功匹配到的代码位置继续向下查找getAllMsg传入msglist参数的代码,找不到则终止匹配,找到则仍继续利用其它行正则表达式进行匹配,直到所有正则表达式规则都匹配完毕,最后记录匹配结果。
下面举例1个正则表达式队列:
TNUserMgr(\w+_as_variablename) ---------第1行正则表达式
variablename(\.|->)GetUserName\(\)---------第2行正则表达式.............................................................................
其中,上述正则表达式队列中,(\w+)用于匹配标准格式代码段中的1个单词,若匹配成功,则单词例如暂记为variablename;若整行匹配失败,则放弃匹配,而若整行匹配成功,则继续第2行正则表达式匹配,将第2行正则表达式中的variablename替换成前面成功匹配的单词,再继续匹配。
例如有1标准格式代码段为:
TNUserMgr usermgr; ------------------第1行标准格式代码
usermgr.Init(); -----------------第3行标准格式代码
usremgr.GetUserName();-----------------第3行标准格式代码
匹配过程可如下:
首先,第1行正则表达式对第1行标准格式代码进行匹配;
此处匹配成功,记录variablename为usermgr;
然后,第2行正则表达式对第2行标准格式代码进行匹配;
其中,此处第2行正则表达式中的variablename被替换成usermgr,第2行正则表达式变成如下:usermgr(\.|->)GetUserName\(\);变换后的第2行正则表达式对第2行标准格式代码进行匹配,由于GetUserName与Init匹配不了,所以匹配会失败。
之后,变换后的第2行正则表达式usermgr(\.|->)GetUserName\(\),对第3行标准格式代码进行匹配,此时,变换后的第2行正则表达式可匹配成功第3行标准格式代码,因此,正则表达式队列与标准格式代码段匹配成功,成功找到了定义TNUserMgr对象并且通过该对象调用GetUserName方法的代码。
又例如,若标准格式代码段修改为如下:
TNUserMgr customer; ------------------第1行标准格式代码
customer.Init(); ------------------第2行标准格式代码
customer.GetUserName();------------------第3行标准格式代码
利用上述正则表达式队列仍然可与修改的标准格式代码段匹配成功。
又例如,若标准格式代码段修改为如下:
TNUserMgr customer; ------------------第1行标准格式代码
usermgr.Init(); ------------------第2行标准格式代码
usermgr.GetUserName();------------------第3行标准格式代码
利用上述正则表达式队列无法成功与修改的标准格式代码段匹配成功;因为变量定义的名称为customer,而调用GetUserName方法的对象不是customer而是usermgr,故而不符合规则的上下文描述。
此外,基于本发明正则表达式队列的匹配机制,可实现正则表达式队列中各行正则表达式的耦合关联。例如,在代码行与正则表达式匹配的时候,可以在正则表达式里标识特殊名称,然后将名称下插到后面的正则表达式里,即将\w*匹配做一个标识,当成功匹配到一个单词后,被匹配的单词可做一些限制约束:如匹配的单词可以作为下一行正则表达式的输入,以便正则表达式之间实现更紧密的耦合关联。
例如查找通过Employee定义1个对象,再通过该对象调用getsalary()方法的代码。则用于匹配的正则表达式队列可如下:
Employee\w*_as_staff ---------第1行正则表达式
staff(\.|->)getsalary\(\)---------第2行正则表达式
其中,第1行正则表达式将会匹配任意的Employee带1个单词的代码,当匹配到这样的代码时,假定被匹配的单词为anyword,此时\w*_as_staff将正则表达式里的staff映射为单词anyword,而在第2行正则表达式在匹配的时候staff(\.|->)getsalary\(\)就会先被替换成anyword(\.|->)getsalary\(\),再进一步进行匹配。
如下三个标准格式代码段中,通过Employee定义的变量来访问getsalary方法的代码进行匹配的情况如下:
标准格式代码段1:
Employee worker; ------------------第1行标准格式代码
worker.getsalary();------------------第2行标准格式代码
利用上述正则表达式队列匹配的结果为匹配成功。
标准格式代码段2:
Employee staff; ------------------第1行标准格式代码
staff.getsalary();------------------第2行标准格式代码
利用上述正则表达式队列匹配的结果为匹配成功。
标准格式代码段3:
Employee worker; ------------------第1行标准格式代码
employee.getsalary();------------------第2行标准格式代码
利用上述正则表达式队列匹配的结果为匹配失败。
又例如,匹配任意单词,但排除一些单词,排查条件可以是要求包含某些或者不包含某些字符,或者符合更复杂的正则表达式约束。
例如通过Employee定义1个变量,变量名称可以任意但须包含字符“staf”。
则用于匹配的正则表达式队列可如下:
Employee\w*_as_staff_include_staf ---------第1行正则表达式
staff(\.|->)getsalary\(\) ---------第2行正则表达式
其中,\w*_as_staff_include_staf通过as_staff将匹配的单词标记映射为staff,并且通过include添加约束要求匹配的单词必须包含staf字符,如果不满足要求,则匹配认为不成功。
类似的,也可以通过不匹配(exclude),正则表达式匹配(regex_match))或正则表达式不匹配(regex_not_match)实现更多更详细约束。
另外,本发明实施例提供的匹配机制还可实现弹性或非弹性匹配。
例如,当正则表达式队列的第i行正则表达式与标准格式代码段的第j行标准格式代码匹配成功后,第i+1行正则表达式可以做此种约束:被匹配的标准格式代码是否必须只能是第j+1行或者j+1及后面的任意标准格式代码行,如果约束是前者,则表示是非弹性的,否则是弹性的。非弹性也可以理解为相邻行正则表达式匹配的代码行也要求相邻,而弹性可以理解为相邻行的正则表达式匹配的标准格式代码行可以相邻,也可以不相邻,行号可以存在跳跃。
例如,下面通过关键字elasticity表示当前正则表达式与下一行正则表达式是弹性关系:
Employee\w*_as_staff_elasticity ---------第1行正则表达式
staff(\.|->)getsalary\(\) ---------第2行正则表达式
对如下三个标准格式代码段的匹配情况如下:
标准格式代码段4:
Employee worker; ------------------第1行标准格式代码
int variable_k=0; ------------------第2行标准格式代码
worker.getsalary();------------------第3行标准格式代码
利用上述正则表达式队列匹配的结果为匹配失败。
标准格式代码段5:
Employee staff; ------------------第1行标准格式代码
int variable_k=0; ------------------第2行标准格式代码
staff.getsalary();------------------第3行标准格式代码
利用上述正则表达式队列匹配的结果为匹配成功。
标准格式代码段6:
Employee worker; ------------------第1行标准格式代码
int variable_k=0; ------------------第2行标准格式代码
employee.getsalary();------------------第3行标准格式代码
利用上述正则表达式队列匹配的结果为匹配失败。
又例如,可通过noelasticity关键字表示非弹性的:
Employee\w*_as_staff_noelasticity ---------第1行正则表达式
staff(\.|->)getsalary\(\) ---------第2行正则表达式
则对如下三个标准格式代码段的匹配情况可如下:
标准格式代码段7:
Employee worker; ------------------第1行标准格式代码
worker.getsalary();------------------第2行标准格式代码
int variable_k=0; ------------------第3行标准格式代码
利用上述正则表达式队列匹配的结果为匹配失败。
标准格式代码段8:
Employee staff; ------------------第1行标准格式代码
;staff.getsalary();------------------第2行标准格式代码
int variable_k=0 ------------------第3行标准格式代码
利用上述正则表达式队列匹配的结果为匹配成功。
标准格式代码段9:
Employee worker; ------------------第1行标准格式代码
employee.getsalary();------------------第2行标准格式代码
int variable_k=0; ------------------第3行标准格式代码
利用上述正则表达式队列匹配的结果为匹配失败。
另外,基于本发明正则表达式队列的匹配机制,还可实现更为复杂的匹配逻辑,例如,若符合正则表达式队列第1行正则表达式,并且不符合正则表达式队列的第2行正则表达式,则表示匹配正确,即实现p&非q的逻辑。
例如,假设open(myfile)之后如果不存在fclose(myfile)则是打开文件没有关闭回收句柄的有问题的代码,另外lock.acquire()加锁但后面代码没有lock.release()的代码是加锁没有释放锁的代码,为了查找这些代码,可以使用如下正则表达式队列:
fopen(CPP_IDENTIFIER(filepointer))---------第1行正则表达式
!fclose(filepointer)! ---------第2行正则表达式
其中,第1行正则表达式CPP_IDENTIFIER表示filepointer是一个C++标识符,如果成功匹配第1行正则表达式,filepointer记录匹配上的标识符名称,上述为myfile,在第2行正则表达式匹配时,标识符替换为fclose(myfile)。第2行正则表达式中的“!…!”则表示逻辑非,若第1行正则表达式匹配成功,则利用第2行正则表达式继续匹配,如果匹配到fclose(myfile),则可记录下匹配到fclose(myfile)的该代码行的行号。其中,如果存在fopen(myfile)而缺少fclose(myfile),则第1行规则匹配成功,第2行规则匹配失败,可记录代码位置和行号以供输出。
如要求找到这样一种函数代码,该代码通过Employee定义了一个对象,并且没有通过该对象调用getsalary函数的函数。
另外,可对CPP_IDENTIFIER做了进一步改进,以匹配希望的标识符,比如希望查找lock调用了非release的其他任何标识符,可以写为:
lock.CPP_IDENTIFIER(funcall_NOT_MATCH_release)
即通过双下划线和设定一些诸如MATCH,NOT_MATCH一些关键字,达到更精确的匹配,这样lock.acquire就可以正确匹配,而lock.release则匹配不成功。
另外,对正则表达式的弹性匹配也可以要求固定匹配,这样可以查找一些定义了对象立即做处理的代码,比如STL的map的find方法返回的迭代子要与末尾比较才能使用,直接使用存在异常风险:
std::map<int,int>::const_iterator mapcit=mymap.find(100);
int k=mapcit->second;//这里存在异常风险
符合要求的正则表达式列表例如可如下:
const_iterator CPP_IDENTIFIER(mcit)=CPP_IDENTIFIER(mymap).find(\
mcit->second
其中,第1行正则表达式的最后的“\”即表示下一行正则表达式在代码匹配时要求也是相邻的。
又例如,对大量数据,比如海量Doc文档管理、海量日志管理、海量数据维护,如果希望查找文件内容符合特定要求的的文档,则亦可利用本发明匹配方式实施,比如日志管理中,希望查找有特定段落,并且段落中有特定单词或者词组的日志,假定日志格式如下:
假设,要查找有创建网元3145726的请求日志,则用于匹配的正则表达式队列例如可以如下:
AsnCreateNeReq
{
neidlist_MATCH_3145726
其中,第1行正则表达式查找创建网元请求;若找到,则查找左括号,匹配成功之后,则以MATCH关键字查找neidlist字段中是否存在3145726数字,是则表示整个匹配成功。
在拥有和维护海量数据、文档、代码、脚本时,如果确定某些个符合特定的多行正则表达式的代码是有问题需要查找出来的,则可使用正则表达式队列快速响应查找,特别是对C++代码的维护,可将开发经验、总结性文档、编码规范、军规、checklist,验收标准,开发指导,问题排查列表总结的Coredump或泄漏、死锁、异常等等都可基于本发明机制转换为正则表达式队列,利用正则表达式队列来实现这些复杂逻辑的查找匹配,且无需人工干预可以直接集成到集成开发环境提供自动化检查。
可以理解,上述举例的场景仅为说明,在实际应用中不限于这些场景和举例的方式,可根据实际情况适应性改变。本发明方案可应用于排查C++、Java各类代码、Python、Perl等各类脚本、XML(Extensible Markup Language,可扩展标记语言)、PHP(PHP:Hypertext Preprocessor,PHP超文本处理语言)等各类网页,配置文件、Doc或PPT(Power Point,演示文稿)、Xls、PDF(PortableDocument Format,便携式文件格式)等各类文档,log,dat等各类日志等,基于本发明方案可以查找符合特定要求的代码、文档、脚本和日志等,应用场景广泛。
由上可见,本实施例中利用包括多行正则表达式的正则表达式队列来匹配标准格式代码段,且某行正则表达式的匹配结果可能影响到后续另一行正则表达式的匹配,由于是通过多行正则表达式组合匹配,有利于实现更多更复杂逻辑的匹配,进而有利于提高复杂规则代码的匹配排查能力。
进一步的,通过增加正则表达式队列的各行正则表达式的耦合关系,在正则表达式引入变量,有利于进一步增强正则表达式队列对复杂逻辑关系的匹配能力。
为便于更好的实施本发明实施例的技术方案,本发明实施例还提供用于实施上述技术方案的相关装置。
参见图4-a,本发明实施例提供的一种代码排查设备400,可包括:第一匹配单元410、判断单元420、第二匹配单元430、第三匹配单元440和匹配结果输出单元450。
第一匹配单元410,用于利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配,其中,上述正则表达式队列包括M行正则表达式,上述标准格式代码段包括N行标准格式代码,其中,上述M、N、m和n为正整数,M和N大于1,0<m≤M,0<n≤N。
判断单元420,用于确定匹配单元410利用正则表达式队列中的第m行正则表达式是否成功匹配标准格式代码段中的第n行标准格式代码。
第二匹配单元430用于,若判断单元420确定出上述匹配单元利用上述正则表达式队列中的第m行正则表达式未成功匹配到上述标准格式代码段中的第n行标准格式代码,且上述n+y小于或等于N且大于0,则利用上述正则表达式队列中的第m行正则表达式对上述标准格式代码段中的第n+y行标准格式代码进行匹配。
第三匹配单元440用于,若判断单元420确定出上述匹配单元利用若上述正则表达式队列中的第m行正则表达式成功匹配到了上述标准格式代码段中的第n行标准格式代码,且上述m+x小于或等于M且大于0,并且上述n+y小于或等于上述N且大于0,则利用上述正则表达式队列中的第m+x行正则表达式,对上述标准格式代码段中的第n+y行标准格式代码进行匹配;其中,上述x和y为非零整数,上述x和/或y为可变值或者固定值。
匹配结果输出单元450,用于若满足设定的匹配停止条件,则输出上述正则表达式队列与上述标准格式代码段的匹配结果。
在本发明的一些实施例中,匹配结果输出单元450可具体用于,若上述正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数,则输出匹配结果为上述标准格式代码段被上述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数,但上述n+y小于0或大于上述N,则输出匹配结果为上述标准格式代码段与上述正则表达式队列匹配失败。
在本发明的一些实施例中,匹配结果输出单元450可具体用于,若上述正则表达式队列中的每行正则表达式均被成功匹配了至少1次,则输出匹配结果为上述标准格式代码段被上述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配至少1次,但上述n+y小于0或者大于上述N,则输出匹配结果为上述标准格式代码段与上述正则表达式队列匹配失败。
参见图4-b,在本发明的一些实施例中,代码排查设备400还包括:
获取单元460,用于获取源代码段;将获取的源代码段进行格式标准化处理以得到标准格式代码段。例如获取单元460可去除获取到的源代码段中的注释、换行和/或连续多个空格以得到标准格式代码段。此外,若源代码段已经是标准格式的,则直接可将源代码段作为标准格式代码段。源代码进行格式标准化处理的目的之一是,便于与正则表达式进行匹配而不受到非代码内容的影响。
在本发明的一些实施例中,第三匹配单元440可具体用于,判断单元420确定出上述匹配单元利用若上述正则表达式队列中的第m行正则表达式成功匹配到了上述标准格式代码段中的第n行标准格式代码,且上述m+x小于或等于M且大于0,并且上述n+y小于或等于上述N且大于0,则利用在上述第n行标准格式代码成功匹配到的字符串,对上述正则表达式队列中的第m+x行正则表达式中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对上述标准格式代码段中的第n+y行标准格式代码进行匹配。
在本发明的一些实施例中,若x和/或y为可变值,则x和/或y可随着某些条件而不断变化,例如,x可在k和-k之间变化,其中,k为非零整数,k例如可等于1、2、3、4或其它非零整数;又例如,x也可不断的递增或者递减,如x的递增趋势可以是x=x+a,即每次x的取值都在其上一次取值的基础上加a,其中,a为非零整数,a例如可等于1、2、3、4、-1、-2、-3、-4或其它非零整数。当然x也可按照其它方式进行变化,若y为可变值,则y的变化趋势可与之类似。若x和/或y为固定值,则x和/或y例如可等于1、2、3、4、-1、-2、-3、-4或其它非零整数。
在本发明的一些实施例中,上述正则表达式队列中的任意两行正则表达式均不相同;或者,上述正则表达式队列中的至少两行正则表达式相同,即正则表达式队列中部分行正则表达式相同,举例来说,正则表达式队列中的第1行和第4行相同,和/或第3行和第8行相同,和/或第2行、5行和第7行相同,以此类推。
可以理解,本实施例的代码排查设备400可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实施例中的相关描述,此处不再赘述。
由上可见,本实施例代码排查设备400利用包括多行正则表达式的正则表达式队列来匹配标准格式代码段,且某行正则表达式的匹配结果可能影响到后续另一行正则表达式的匹配,由于是通过多行正则表达式组合匹配,有利于实现更多更复杂逻辑的匹配,进而有利于提高复杂规则代码的匹配排查能力。
进一步的,通过增加正则表达式队列的各行正则表达式的耦合关系,在正则表达式引入变量,有利于进一步增强正则表达式队列对复杂逻辑关系的匹配能力。
参见图5,本发明实施例提供一种计算机系统500包括:处理器510、存储器520、输出设备530和输入设备540。其中,处理器510、存储器520、输出设备530和输入设备540可通过总线连接,当然亦通过其它方式连接,图中以通过总线连接为例。
其中,处理器510执行如下步骤:利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配;若该正则表达式队列中的第m行正则表达式未成功匹配到该标准格式代码段中的第n行标准格式代码,且该n+y小于或等于N且大于0,则利用该正则表达式队列中的第m行正则表达式对该标准格式代码段中的第n+y行标准格式代码进行匹配;若该正则表达式队列中的第m行正则表达式成功匹配到了该标准格式代码段中的第n行标准格式代码,且该m+x小于或等于M且大于0,且该n+y大于0且小于或等于该N,则利用该正则表达式队列中的第m+x行正则表达式,对该标准格式代码段中的第n+y行标准格式代码进行匹配;其中,x和y为非零整数,该x和/或y为可变值或固定值,该标准格式代码段包括N行标准格式代码,该正则表达式队列包括M行正则表达式,上述M、N、m和n为正整数,M和N大于1,0<m≤M,0<n≤N;若满足设定的匹配停止条件,则输出上述正则表达式队列与上述标准格式代码段的匹配结果。
其中,正则表达式队列中的正则表达式可包括:PERL或POSIX正则表达式或其它类型的正则表达式。
在实际应用中,正则表达式队列中的正则表达式所描述的逻辑运算例如可包括如下逻辑运算的一种或多种:赋值、加、减、乘、除、等于、不等于、大于、大于等于、小于、小于等于、逻辑或、逻辑与、按位与、按位或、非、取反、异或、左移位、右移位等等。
在本发明的一些实施例中,上述正则表达式队列中的任意两行正则表达式均不相同;或者,上述正则表达式队列中的至少两行正则表达式相同,即正则表达式队列中部分行正则表达式相同,举例来说,正则表达式队列中的第1行和第4行相同,和/或第3行和第8行相同,和/或第2行、5行和第7行相同,以此类推。
在本发明的一些实施例中,若x和/或y为可变值,则x和/或y可随着某些条件而不断变化,例如,x可在k和-k之间变化,其中,k为非零整数,k例如可等于1、2、3、4或其它非零整数;又例如,x也可不断的递增或者递减,如x的递增趋势可以是x=x+a,即每次x的取值都在其上一次取值的基础上加a,其中,a为非零整数,a例如可等于1、2、3、4、-1、-2、-3、-4或其它非零整数。当然x也可按照其它方式进行变化,若y为可变值,则y的变化趋势可与之类似。若x和/或y为固定值,则x和/或y例如可等于1、2、3、4、-1、-2、-3、-4或其它非零整数。
在本发明的一些实施例中,若满足设定的匹配停止条件,则处理器510输出正则表达式队列与标准格式代码段的匹配结果,可包括:若正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数(例如至少1次或至少2次),则输出匹配结果为标准格式代码段被正则表达式队列成功匹配;和/或若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数(例如至少1次或至少2次),但上述n+y小于0或大于N,则输出匹配结果为标准格式代码段与正则表达式队列匹配失败。
在本发明的一些实施例中,假设x和y等于1,且正则表达式队列中的每行正则表达式只需成功匹配1次,则例如,若正则表达式队列中的第m行正则表达式成功匹配到了标准格式代码段中的第n行标准格式代码,且m等于M(其中,m等于M,表示正则表达式队列中的每行正则表达式均被成功匹配了至少1次),则输出匹配结果可为正则表达式队列与标准格式代码段成功匹配。又例如,若正则表达式队列中的第m行正则表达式成功匹配到了标准格式代码段中的第n行标准格式代码,且m小于M(其中,m小于M,表示正则表达式队列中的至少有1行正则表达式未被成功匹配至少1次),但n等于N(其中,n等于N表示标准格式代码段的每行标准格式代码段均已被匹配过);则可确定正则表达式队列与标准格式代码段匹配失败。又例如,若正则表达式队列中的第m行正则表达式未成功匹配到标准格式代码中的第n行标准格式代码,且n等于N,则确定上述正则表达式队列与上述标准格式代码匹配失败。对于x和y等于其它非零整数的情况可以此类推;对于正则表达式队列中的部分或全部行正则表达式需成功匹配多次的情况,亦可以此类推。
在本发明的一些实施例中,处理器510获取标准格式代码段的方式可包括:获取源代码段;将获取的源代码段进行格式标准化处理以得到标准格式代码段。例如可去除获取到的源代码段中的注释、换行和/或连续多个空格以得到标准格式代码段。此外,若源代码段已经是标准格式的,则直接可将源代码段作为标准格式代码段。源代码进行格式标准化处理的目的之一是,便于与正则表达式进行匹配而不受非代码内容影响。
在本发明的一些实施例中,处理器510利用上述正则表达式队列中的第m+x行正则表达式,对上述标准格式代码段中的第n+y行标准格式代码进行匹配可包括:利用在第n行标准格式代码中成功匹配到字符串,对上述正则表达式队列中的第m+x行中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对上述标准格式代码段中的第n+y行标准格式代码进行匹配。其中,通过在正则表达式引入变量,并根据匹配情况对变量进行赋值,这样有利于进一步增强正则表达式队列对复杂关系(例如函数关系、变量关系)的匹配能力。
可以理解,本实施例的计算机系统500可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述实施例中的相关描述,此处不再赘述。
另外,本发明实施例中的存储器520用于存储如上方法的实现程序。本发明实施例的输入设备,例如可包括如下器件的至少一种:键盘、触摸屏、音频/视频输入设备、其它输入设备,输出设备可包括如下器件的至少一种:显示器、音频/视频输出设备、其它输入设备。
由上可见,本实施例中计算机系统500利用包括多行正则表达式的正则表达式队列来匹配标准格式代码段,且某行正则表达式的匹配结果可能影响到后续另一行正则表达式的匹配,由于是通过多行正则表达式组合匹配,有利于实现更多更复杂逻辑的匹配,进而有利于提高复杂规则代码的匹配排查能力。
进一步的,通过增加正则表达式队列的各行正则表达式的耦合关系,在正则表达式引入变量,有利于进一步增强正则表达式队列对复杂逻辑关系的匹配能力。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的代码排查方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置和系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上对本发明实施例所提供的模式匹配方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
Claims (13)
1.一种代码排查方法,其特征在于,包括:
利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配;
若所述正则表达式队列中的第m行正则表达式未成功匹配到所述标准格式代码段中的第n行标准格式代码,且所述n+y小于或等于N且大于0,则利用所述正则表达式队列中的第m行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配;
若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用所述正则表达式队列中的第m+x行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配;
其中,所述x和y为非零整数,所述x和/或y为可变值或者固定值,所述标准格式代码段包括N行标准格式代码,所述正则表达式队列包括M行正则表达式,所述M、N、m和n为正整数,所述M和N大于1,0<m≤M,0<n≤N;
若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果。
2.根据权利要求1所述的方法,其特征在于,
所述若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果,包括:
若所述正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数,则输出匹配结果为所述标准格式代码段被所述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数,但所述n+y小于0或大于所述N,则输出匹配结果为所述标准格式代码段与所述正则表达式队列匹配失败。
3.根据权利要求1所述的方法,其特征在于,
所述若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果,包括:若所述正则表达式队列中的每行正则表达式均被成功匹配了至少1次,则输出匹配结果为所述标准格式代码段被所述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配至少1次,但所述n+y小于0或者大于所述N,则输出匹配结果为所述标准格式代码段与所述正则表达式队列匹配失败。
4.根据权利要求1至3任一项所述的方法,其特征在于,在所述利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配的步骤之前,所述方法还包括:
获取源代码段;
将获取的源代码段进行格式标准化处理以得到标准格式代码段。
5.根据权利要求4所述的方法,其特征在于,所述将获取的源代码段进行格式标准化处理得到标准格式代码段包括:去除获取的源代码段中的注释、换行和/或连续多个空格以得到标准格式代码段。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用所述正则表达式队列中的第m+x行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配,包括:
若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x或等于小于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用在所述第n行标准格式代码成功匹配到的字符串,对所述正则表达式队列中的第m+x行正则表达式中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对所述标准格式代码段中的第n+y行标准格式代码进行匹配。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述正则表达式队列中的至少两行正则表达式相同,或者,所述正则表达式队列中的任意两行正则表达式均不相同。
8.根据权利要求1至7任一项所述的方法,其特征在于,
所述x和/或y等于1。
9.一种代码排查设备,其特征在于,包括:
第一匹配单元,用于利用正则表达式队列中的第m行正则表达式对标准格式代码段中的第n行标准格式代码进行匹配,其中,所述正则表达式队列包括M行正则表达式,所述标准格式代码段包括N行标准格式代码,所述M、N、m和n为正整数,所述M和N大于1,0<m≤M,0<n≤N;
判断单元,用于确定所述第一匹配单元利用正则表达式队列中的第m行正则表达式是否成功匹配标准格式代码段中的第n行标准格式代码;
第二匹配单元,用于若所述判断单元确定出所述匹配单元利用所述正则表达式队列中的第m行正则表达式未成功匹配到所述标准格式代码段中的第n行标准格式代码,且所述n+y小于或等于N且大于0,则利用所述正则表达式队列中的第m行正则表达式对所述标准格式代码段中的第n+y行标准格式代码进行匹配;
第三匹配单元,用于若所述判断单元确定出所述匹配单元利用若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用所述正则表达式队列中的第m+x行正则表达式,对所述标准格式代码段中的第n+y行标准格式代码进行匹配;其中,所述x和y为非零整数,所述x和/或y为可变值或者固定值;
匹配结果输出单元,用于若满足设定的匹配停止条件,则输出所述正则表达式队列与所述标准格式代码段的匹配结果。
10.根据权利要求9所述的代码排查设备,其特征在于,
所述匹配结果输出单元具体用于,若所述正则表达式队列中的每行正则表达式均被成功匹配了对应的设定次数,则输出匹配结果为所述标准格式代码段被所述正则表达式队列成功匹配;和/或,若正则表达式队列中的任意一行正则表达式未被成功匹配对应的设定次数,但所述n+y小于0或大于所述N,则输出匹配结果为所述标准格式代码段与所述正则表达式队列匹配失败。
11.根据权利要求9或10所述的代码排查设备,其特征在于,
所述代码排查设备还包括:
获取单元,用于获取源代码段;将获取的源代码段进行格式标准化处理以得到标准格式代码段。
12.根据权利要求9至11任一项所述的代码排查设备,其特征在于,
所述第三匹配单元具体用于:若所述判断单元确定出所述匹配单元利用若所述正则表达式队列中的第m行正则表达式成功匹配到了所述标准格式代码段中的第n行标准格式代码,且所述m+x小于或等于M且大于0,并且所述n+y小于或等于所述N且大于0,则利用在所述第n行标准格式代码成功匹配到的字符串,对所述正则表达式队列中的第m+x行正则表达式中的变量进行赋值,利用变量赋值后的第m+x行正则表达式对所述标准格式代码段中的第n+y行标准格式代码进行匹配。
13.根据权利要求9至12任一项所述的代码排查设备,其特征在于,所述x和/或y等于1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210355330.3A CN102929596B (zh) | 2012-09-21 | 2012-09-21 | 代码排查方法和相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210355330.3A CN102929596B (zh) | 2012-09-21 | 2012-09-21 | 代码排查方法和相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929596A true CN102929596A (zh) | 2013-02-13 |
CN102929596B CN102929596B (zh) | 2016-01-06 |
Family
ID=47644409
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210355330.3A Active CN102929596B (zh) | 2012-09-21 | 2012-09-21 | 代码排查方法和相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102929596B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268713A (zh) * | 2014-10-13 | 2015-01-07 | 宁波公众信息产业有限公司 | 一种绩效考核计算方法及系统 |
CN107423084A (zh) * | 2017-04-24 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 程序修改方法及装置 |
CN107704374A (zh) * | 2016-08-08 | 2018-02-16 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
CN107908405A (zh) * | 2017-11-17 | 2018-04-13 | 苏州蜗牛数字科技股份有限公司 | 代码静态审核装置及方法 |
CN109271168A (zh) * | 2018-08-09 | 2019-01-25 | 上海鲸鱼机器人科技有限公司 | 一种代码转换方法、装置及设备、存储介质 |
WO2019061913A1 (zh) * | 2017-09-29 | 2019-04-04 | 上海望友信息科技有限公司 | 数据类型的识别方法、系统、计算机可读存储介质及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094135A (zh) * | 2006-06-23 | 2007-12-26 | 腾讯科技(深圳)有限公司 | 一种互联网内容信息的提取方法和提取系统 |
CN101206467A (zh) * | 2006-12-22 | 2008-06-25 | 南京理工大学 | 通用数控代码解析方法 |
US20090282391A1 (en) * | 2008-05-09 | 2009-11-12 | Francisco Gutierrez | Converting format strings to regular expressions |
-
2012
- 2012-09-21 CN CN201210355330.3A patent/CN102929596B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094135A (zh) * | 2006-06-23 | 2007-12-26 | 腾讯科技(深圳)有限公司 | 一种互联网内容信息的提取方法和提取系统 |
CN101206467A (zh) * | 2006-12-22 | 2008-06-25 | 南京理工大学 | 通用数控代码解析方法 |
US20090282391A1 (en) * | 2008-05-09 | 2009-11-12 | Francisco Gutierrez | Converting format strings to regular expressions |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268713A (zh) * | 2014-10-13 | 2015-01-07 | 宁波公众信息产业有限公司 | 一种绩效考核计算方法及系统 |
CN107704374A (zh) * | 2016-08-08 | 2018-02-16 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
CN107704374B (zh) * | 2016-08-08 | 2021-05-25 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
CN107423084A (zh) * | 2017-04-24 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 程序修改方法及装置 |
CN107423084B (zh) * | 2017-04-24 | 2021-02-02 | 武汉斗鱼网络科技有限公司 | 程序修改方法及装置 |
WO2019061913A1 (zh) * | 2017-09-29 | 2019-04-04 | 上海望友信息科技有限公司 | 数据类型的识别方法、系统、计算机可读存储介质及设备 |
CN107908405A (zh) * | 2017-11-17 | 2018-04-13 | 苏州蜗牛数字科技股份有限公司 | 代码静态审核装置及方法 |
CN109271168A (zh) * | 2018-08-09 | 2019-01-25 | 上海鲸鱼机器人科技有限公司 | 一种代码转换方法、装置及设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102929596B (zh) | 2016-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797298B2 (en) | Automating identification of code snippets for library suggestion models | |
US11354225B2 (en) | Automating identification of test cases for library suggestion models | |
US11221832B2 (en) | Pruning engine | |
US11507354B2 (en) | Blackbox matching engine | |
US11494181B2 (en) | Automating generation of library suggestion engine models | |
US11875148B2 (en) | Library model addition | |
CN102929596B (zh) | 代码排查方法和相关装置 | |
CN114201756A (zh) | 一种智能合约代码片段的漏洞检测方法和相关装置 | |
CN115345600B (zh) | 一种rpa流程的生成方法和装置 | |
CN111401009B (zh) | 一种数字表情符识别转换方法、装置、服务器及存储介质 | |
CN110309062A (zh) | 用例生成方法、装置、电子设备及存储介质 | |
CN109522211A (zh) | 接口参数传递方法、装置、电子设备及存储介质 | |
CN115061723A (zh) | 信息处理方法、装置、电子设备及计算机可读存储介质 | |
CN116303987A (zh) | 招标公文的推荐方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |