CN107153692B - 一种字符串匹配的方法及设备 - Google Patents
一种字符串匹配的方法及设备 Download PDFInfo
- Publication number
- CN107153692B CN107153692B CN201710305409.8A CN201710305409A CN107153692B CN 107153692 B CN107153692 B CN 107153692B CN 201710305409 A CN201710305409 A CN 201710305409A CN 107153692 B CN107153692 B CN 107153692B
- Authority
- CN
- China
- Prior art keywords
- matching
- row
- data
- column
- field
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种字符串匹配的方法及设备,本申请通过步骤一,确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与匹配字符串进行多模匹配,得到列匹配结果;步骤二,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;步骤三,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;重复循环以上步骤一至步骤三,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。从而大多数情况下无需遍历整个矩阵数据,大幅度提高匹配效率。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种字符串匹配的方法及设备。
背景技术
字符串匹配是在一个大的目标字符串数据库中搜索出某个给定模式字符串位置的过程,字符串匹配应用比较广泛,比如,在入侵检测系统中,为了对网络系统的运行状态进行监视,发现各种攻击企图、攻击行为或者攻击结果,保证系统资源的机密性和可用性,需要对获取的网络数据包进行检测是否存在入侵的非法数据,首先针对一类数据包的所有已知的入侵行为的模式字符串分别放在模式字符串库中,对入侵的非法数据的检测,可以通过字符串匹配,确定获取的网络数据包的字符串中是否存在模式字符串库中的模式字符串,如果存在,表示存在入侵行为。目前,数据库中的字符串通常以表格形式存储,取出表格的某些行某些列的数据,可以看做为矩阵数据,在数据库表中查找给定字符串的子串的需求时,是将矩阵数据逐行取出,再将每个字段和字符串进行匹配,显然需要遍历整个矩阵数据,其中执行了很多无用工,匹配效率低下。
申请内容
本申请的一个目的是提供一种字符串匹配的方法及设备,解决现有技术中查找给定字符串的子串时匹配效率低下的问题。
根据本申请的一个方面,提供了一种字符串匹配的方法,该方法包括:
步骤一,确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与匹配字符串进行多模匹配,得到列匹配结果;
步骤二,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;
步骤三,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;
重复循环以上步骤一至步骤三,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。
进一步地,在上述方法中,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,包括:
确定所述列匹配结果中匹配成功的行对应的行数据;
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果。
进一步地,在上述方法中,所述预设的匹配成功条件包括:
一行数据中匹配成功的字段数大于等于n,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;
矩阵数据中总共成功匹配的行数大于等于m,其中,m为自然数。
进一步地,在上述方法中,将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果,包括:
将所述行数据逐字段与字符串进行多模匹配,若已匹配成功的字段数与未处理的字段数之和小于n,则所述行数据的多模匹配结果为匹配失败。
进一步地,在上述方法中,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,包括:
判断所述矩阵数据的剩余列数是否大于等于n,若否,则所述矩阵数据匹配失败。
进一步地,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行,包括:
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据的多模匹配是否满足预设的匹配成功条件中的一行数据中匹配成功的字段数大于等于n,若是,则得到匹配结果为所述行数据匹配成功,并标记所述行数据的行号及记录匹配成功的字段;
若否,则得到匹配结果为所述行数据匹配失败,并标记所述行数据的行号。
根据本申请的另一方面,还提供了一种字符串匹配的设备,所述设备包括:
列匹配装置,用于确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与匹配字符串进行多模匹配,得到列匹配结果;
行匹配装置,用于根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;
判断装置,用于判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;
重复循环以上列匹配装置、行匹配装置及判断装置中的执行步骤,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。
进一步地,在上述设备中,所述行匹配装置用于:
确定所述列匹配结果中匹配成功的行对应的行数据;
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果。
进一步地,所述预设的匹配成功条件包括:
一行数据中匹配成功的字段数大于等于n,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;
矩阵数据中总共成功匹配的行数大于等于m,其中,m为自然数。
进一步地,所述行匹配装置用于:
将所述行数据逐字段与字符串进行多模匹配,若已匹配成功的字段数与未处理的字段数之和小于n,则所述行数据的多模匹配结果为匹配失败。
进一步地,在上述设备中,所述行匹配装置用于:
判断所述矩阵数据的剩余列数是否大于等于n,若否,则所述矩阵数据匹配失败。
进一步地,所述行匹配装置用于:
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据的多模匹配是否满足预设的匹配成功条件中的一行数据中匹配成功的字段数大于等于n,若是,则得到匹配结果为所述行数据匹配成功,并标记所述行数据的行号及记录匹配成功的字段;
若否,则得到匹配结果为所述行数据匹配失败,并标记所述行数据的行号。
与现有技术相比,本申请通过步骤一,确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与匹配字符串进行多模匹配,得到列匹配结果;步骤二,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;步骤三,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;重复循环以上步骤一至步骤三,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。从而大多数情况下无需遍历整个矩阵数据,省去了无用工,大幅度提高匹配效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请的一个方面提供的一种字符串匹配的方法流程示意图;
图2示出本申请中的一实施例的矩阵数据字符串匹配的流程示意图;
图3示出根据本申请的另一个方面提供的一种字符串匹配的设备结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请的一个方面提供的一种字符串匹配的方法流程示意图,该方法包括:
步骤S1,确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与匹配字符串进行多模匹配,得到列匹配结果;在此,将一行匹配变为多行匹配,即取出一列数据,通过获取矩阵数据中待匹配的列,对待匹配的列中每行字段进行匹配,得到匹配结果,从而完成由单模匹配变为多模匹配,提高匹配效率。在本申请一实施例中,矩阵数据为3行4列,选出第一列数据,对第一列中的第一行至第三行数据进行与字符串匹配,若至少存在一行是匹配成功的,则该第一列数据的列匹配结果为成功,否则,列匹配结果为失败。
步骤S2,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;在本申请一实施例中,只对列匹配成功的行进行逐个字段匹配,并标记经过多模匹配的行,以便下次直接排除不处理。例如,上述三行四列的矩阵数据,第一列的列匹配结果为第二行的数据匹配成功,则选取第二行数据,此时是包括其他列的第二行数据,逐个字段进行匹配,得到行匹配结果。
步骤S3,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;在本申请一实施例中,在一次列匹配完成后,若剩余列数不满足匹配处理条件,则判定此矩阵数据匹配失败,若还满足匹配处理条件,则继续从剩余列中重新选取待匹配的列,重复循环以上步骤S1至步骤S3,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。在本申请一实施例中,如表1所示的4行5列的矩阵数据,
A1 | B1 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | E2 |
A3 | B3 | C3 | D3 | E3 |
A4 | B4 | C4 | D4 | E4 |
表1
首先取出第一列,设为集合set_A(A1,A2,A3,A4),对set_A进行匹配,若A2匹配成功,则对这一行的剩余字段B2,C2,D2,E2进行逐个匹配,当这行数据处理完,不需要再次处理,因此进行标记排除掉,将A2从set_A中剔除,再对set_A(A1,A3,A4)进行匹配,若匹配成功,则对这一行的剩余字段B3,C3,D3,E3进行逐字段匹配,并进行标记,下次直接排除,再将A3从set_A中剔除,循环对此列匹配,直至此列匹配失败,则再取出第二列时,只比对set_B(B1,B4),若B4匹配成功,对剩余字段C4,D4,E4进行匹配,并进行标记,下次直接排除,依此类推,处理过的行无论是匹配成功还是匹配失败,都需要进行标记,下次直接排除不处理,从而缩短遍历矩阵数据的时间,大大提高了匹配效率。
具体地,所述预设的匹配成功条件包括:一行数据中匹配成功的字段数大于等于n,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;矩阵数据中总共成功匹配的行数大于等于m,其中,m为自然数。在此,如预先设置匹配成功的条件中n和m的值,则匹配时满足条件是:一行数据中匹配成功的字段数大于等于n且矩阵数据中总共成功匹配的行数大于等于m,比如,设置n=3,m=2,则一行数据中匹配成功的字段数只要大于等于3,则匹配结果为成功,矩阵数据中总共成功匹配的行数大于等于2,则矩阵数据匹配成功,如第一行和第三行的行匹配结果为成功,满足总共成功匹配的行数条件,则该矩阵数据匹配成功。
优选地,在步骤S2中,确定所述列匹配结果中匹配成功的行对应的行数据;将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果。在本申请一实施例中,选取矩阵数据中的一列数据进行匹配后,确定对应的匹配成功的行,如所选取的列中第二行数据匹配成功,则选取该第二行的其他数据进行逐字段匹配,判断第二行的数据中已匹配成功的字段是否满足匹配成功条件,若满足,则第二行的多模匹配结果为成功。需要说明的是,将所述行数据逐字段与字符串进行多模匹配,若已匹配成功的字段数与未处理的字段数之和小于n,则所述行数据的多模匹配结果为匹配失败。此时,不用再处理剩余的字段,省去了无用工。进一步地,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,包括:判断所述矩阵数据的剩余列数是否大于等于n,若否,则所述矩阵数据匹配失败。在此,在一次列匹配完成后,若剩余列数<n,则判定此矩阵数据匹配失败。
例如,表2所示的3行4列的数据矩阵,
A1 | B1 | C1 |
A2 | B2 | C2 |
A3 | B3 | C3 |
表2
假设n=2,m=1,表示只要存在1行中的2个字段匹配成功,则该矩阵数据匹配成功。首先,取出第一列进行匹配,一次列匹配完成后,若A2匹配成功,则对B2,C2逐字段进行匹配,若B2匹配成功,则判定第二行匹配成功,且满足m=1的条件,则判定此矩阵数据匹配成功,后续的C2也就没必要再进行匹配,若B2匹配失败,则对C2进行匹配,若C2匹配成功,则判定第二行匹配成功,且满足m=1的条件,则判定此矩阵数据匹配成功。当取出的第一列没有匹配成功时,即A1、A2、A3都没有匹配成功,则从剩余两列中再取出第二列进行匹配,列匹配完成后,若列匹配结果为匹配失败,则剩余1列,此时1<n,表示前面矩阵数据还没有被匹配成功,即使第三列进行匹配成功,则匹配成功的一行中只有一个字段匹配成功,无法满足匹配成功条件n=2,判定该矩阵数据为失败,因此在进行多模匹配过程中,若不满足预设的匹配条件,则停止后续的匹配流程,判定该矩阵数据匹配失败,避免了遍历整个矩阵数据后依然为匹配失败,做无用工,提高查询结果的效率。
在步骤S2中,将所述行数据逐字段与字符串进行多模匹配,判断所述行数据的多模匹配是否满足预设的匹配成功条件中的一行数据中匹配成功的字段数大于等于n,若是,则得到匹配结果为所述行数据匹配成功,并标记所述行数据的行号及记录匹配成功的字段;若否,则得到匹配结果为所述行数据匹配失败,并标记所述行数据的行号。在本申请一实施例中,如图2所示的匹配流程图,用k表示将要处理的矩阵数据中的列号,从k=1开始,获取第一列数据(当前面已经处理过其他列时,此时获取到的列数据需要删除已经处理过的行字段),将这组数据与字符串进行多模匹配,若多模匹配成功,则获取这行数据,判断这一行数据是否满足匹配条件,当满足匹配条件时,记录这一行相关信息,包括行号、字段,以便显示查询结果及方便判断是否满足矩阵匹配条件,判断记录中成功匹配的行数是否大于等于m,若是,则匹配成功,若否,则记录这一行号,以便下次获取数据时排除该行数据,将这一字段从这组数据中删除后再次进行多模匹配,即重新将这组数据与字符串进行多模匹配,若多模匹配的结果为失败,则判断剩余列数是否满足小于n,若是,则矩阵数据匹配失败,若否,则获取后面的列数据,进行多模匹配。
在本申请一实施例中,假设字符串为:string=“my name is bob”,匹配条件为:n=3,m=2,
矩阵数据A如下表3所示:
aaa | aaa | my | aaa | aaa |
m | m | is | b | b |
ccc | y | y | me | ccc |
ddd | ddd | ddd | ddd | ddd |
表3
可以判定矩阵数据A匹配成功,原因为:第二行的每个字段与第三行的第二、三、四字段都可以在字符串string中找到,满足匹配条件。需要说明的是,在匹配过程中,第二行前三个字段匹配成功后,就已经判定第二行满足行匹配条件,后面两个字段无需再进行匹配。每行的字段跟string进行匹配,是在string中查找整个字段,比如字段“y”为匹配成功,而字段“yy”为匹配失败。
在本申请又一实施例中,依然假设字符串为:string=“my name is bob”,匹配条件为:n=3,m=2,待匹配的矩阵数据为以下两个4行5列的矩阵:
aaa | aaa | my | aaa | aaa |
bbb | my | is | bbb | bob |
am | ccc | bo | me | ccc |
ddd | ddd | ddd | ddd | ddd |
矩阵数据1
aaa | aaa | my | aaa | aaa |
bbb | my | is | bbb | bob |
ccc | ccc | ccc | me | ccc |
ddd | ddd | ddd | ddd | ddd |
矩阵数据2
匹配结果为:矩阵数据1匹配成功,矩阵数据2匹配失败。对于矩阵数据1,第二行2,3,5字段和第三行1,3,4字段在字符串string中能找到对应子串,满足匹配成功条件的n=3和m=2,因此匹配成功;而对于矩阵数据2,第二行2,3,5字段在字符串string中能找到对应子串,满足匹配成功条件中的n=3的只有第二行,因此匹配成功的行数只有1行,不满足m=2的匹配成功条件,因此匹配失败。下面以矩阵数据2的具体匹配过程进行说明:
首先取出第一列进行匹配,匹配失败,剩余列数是4>n,再匹配第二列,发现第二行匹配成功,然后对第二行3,4,5字段逐个匹配,发现第二行匹配成功,记录成功并标记,此时匹配成功行数是1<m,未满足第二条件m=2,之后剔除第二行,再对第二列剩余字段进行匹配,匹配失败,剩余列数是3=n,获取第三列数据,并剔除掉第二行数据,进行匹配,发现匹配失败,此时剩余列数为2<n,假设后两列的字段都匹配成功,但每行仅有两个字段匹配成功,不满足成功匹配条件第一条n=3,所以没有必要对后两列进行匹配,则可判定匹配失败。
综上所述,通过本申请所述的矩阵数据的字符串匹配技术,在大多数实际应用场景中无需遍历整个矩阵数据,省去了无用工,大幅度提高匹配效率,在数据库表中快速准确地查找给定字符串的子串。
图3示出根据本申请的另一个方面提供的一种字符串匹配的设备结构示意图,该设备包括:列匹配装置1、行匹配装置2和判断装置3,
列匹配装置1,用于确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与匹配字符串进行多模匹配,得到列匹配结果;在此,将一行匹配变为多行匹配,即取出一列数据,通过获取矩阵数据中待匹配的列,对待匹配的列中每行字段进行匹配,得到匹配结果,从而完成由单模匹配变为多模匹配,提高匹配效率。在本申请一实施例中,矩阵数据为3行4列,选出第一列数据,对第一列中的第一行至第三行数据进行与字符串匹配,若至少存在一行是匹配成功的,则该第一列数据的列匹配结果为成功,否则,列匹配结果为失败。
行匹配装置2,用于根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;在本申请一实施例中,只对列匹配成功的行进行逐个字段匹配,并标记经过多模匹配的行,以便下次直接排除不处理。例如,上述三行四列的矩阵数据,第一列的列匹配结果为第二行的数据匹配成功,则选取第二行数据,此时是包括其他列的第二行数据,逐个字段进行匹配,得到行匹配结果。
判断装置3,用于判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;在本申请一实施例中,在一次列匹配完成后,若剩余列数不满足匹配处理条件,则判定此矩阵数据匹配失败,若还满足匹配处理条件,则继续从剩余列中重新选取待匹配的列,重复循环执行以上列匹配装置1、行匹配装置2和判断装置3中的执行步骤,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。在本申请一实施例中,如表1所示的4行5列的矩阵数据,
A1 | B1 | C1 | D1 | E1 |
A2 | B2 | C2 | D2 | E2 |
A3 | B3 | C3 | D3 | E3 |
A4 | B4 | C4 | D4 | E4 |
表1
首先取出第一列,设为集合set_A(A1,A2,A3,A4),对set_A进行匹配,若A2匹配成功,则对这一行的剩余字段B2,C2,D2,E2进行逐个匹配,当这行数据处理完,不需要再次处理,因此进行标记排除掉,将A2从set_A中剔除,再对set_A(A1,A3,A4)进行匹配,若匹配成功,则对这一行的剩余字段B3,C3,D3,E3进行逐字段匹配,并进行标记,下次直接排除,再将A3从set_A中剔除,循环对此列匹配,直至此列匹配失败,则再取出第二列时,只比对set_B(B1,B4),若B4匹配成功,对剩余字段C4,D4,E4进行匹配,并进行标记,下次直接排除,依此类推,处理过的行无论是匹配成功还是匹配失败,都需要进行标记,下次直接排除不处理,从而缩短遍历矩阵数据的时间,大大提高了匹配效率。
具体地,所述预设的匹配成功条件包括:一行数据中匹配成功的字段数大于等于n,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;矩阵数据中总共成功匹配的行数大于等于m,其中,m为自然数。在此,如预先设置匹配成功的条件中n和m的值,则匹配时满足条件是:一行数据中匹配成功的字段数大于等于n且矩阵数据中总共成功匹配的行数大于等于m,比如,设置n=3,m=2,则一行数据中匹配成功的字段数只要大于等于3,则匹配结果为成功,矩阵数据中总共成功匹配的行数大于等于2,则矩阵数据匹配成功,如第一行和第三行的行匹配结果为成功,满足总共成功匹配的行数条件,则该矩阵数据匹配成功。
优选地,行匹配装置2,用于确定所述列匹配结果中匹配成功的行对应的行数据;将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果。在本申请一实施例中,选取矩阵数据中的一列数据进行匹配后,确定对应的匹配成功的行,如所选取的列中第二行数据匹配成功,则选取该第二行的其他数据进行逐字段匹配,判断第二行的数据中已匹配成功的字段是否满足匹配成功条件,若满足,则第二行的多模匹配结果为成功。需要说明的是,将所述行数据逐字段与字符串进行多模匹配,若已匹配成功的字段数与未处理的字段数之和小于n,则所述行数据的多模匹配结果为匹配失败。此时,不用再处理剩余的字段,省去了无用工。进一步地,行匹配装置2用于:判断所述矩阵数据的剩余列数是否大于等于n,若否,则所述矩阵数据匹配失败。在此,在一次列匹配完成后,若剩余列数<n,则判定此矩阵数据匹配失败。
例如,表2所示的3行4列的数据矩阵,
A1 | B1 | C1 |
A2 | B2 | C2 |
A3 | B3 | C3 |
表2
假设n=2,m=1,表示只要存在1行中的2个字段匹配成功,则该矩阵数据匹配成功。首先,取出第一列进行匹配,一次列匹配完成后,若A2匹配成功,则对B2,C2逐字段进行匹配,若B2匹配成功,则判定第二行匹配成功,且满足m=1的条件,则判定此矩阵数据匹配成功,后续的C2也就没必要再进行匹配,若B2匹配失败,则对C2进行匹配,若C2匹配成功,则判定第二行匹配成功,且满足m=1的条件,则判定此矩阵数据匹配成功。当取出的第一列没有匹配成功时,即A1、A2、A3都没有匹配成功,则从剩余两列中再取出第二列进行匹配,列匹配完成后,若列匹配结果为匹配失败,则剩余1列,此时1<n,表示前面矩阵数据还没有被匹配成功,即使第三列进行匹配成功,则匹配成功的一行中只有一个字段匹配成功,无法满足匹配成功条件n=2,判定该矩阵数据为失败,因此在进行多模匹配过程中,若不满足预设的匹配条件,则停止后续的匹配流程,判定该矩阵数据匹配失败,避免了遍历整个矩阵数据后依然为匹配失败,做无用工,提高查询结果的效率。
行匹配装置2,用于将所述行数据逐字段与字符串进行多模匹配,判断所述行数据的多模匹配是否满足预设的匹配成功条件中的一行数据中匹配成功的字段数大于等于n,若是,则得到匹配结果为所述行数据匹配成功,并标记所述行数据的行号及记录匹配成功的字段;若否,则得到匹配结果为所述行数据匹配失败,并标记所述行数据的行号。在本申请一实施例中,如图2所示的匹配流程图,用k表示将要处理的矩阵数据中的列号,从k=1开始,获取第一列数据(当前面已经处理过其他列时,此时获取到的列数据需要删除已经处理过的行字段),将这组数据与字符串进行多模匹配,若多模匹配成功,则获取这行数据,判断这一行数据是否满足匹配条件,当满足匹配条件时,记录这一行相关信息,包括行号、字段,以便显示查询结果及方便判断是否满足矩阵匹配条件,判断记录中成功匹配的行数是否大于等于m,若是,则匹配成功,若否,则记录这一行号,以便下次获取数据时排除该行数据,将这一字段从这组数据中删除后再次进行多模匹配,即重新将这组数据与字符串进行多模匹配,若多模匹配的结果为失败,则判断剩余列数是否满足小于n,若是,则矩阵数据匹配失败,若否,则获取后面的列数据,进行多模匹配。
在本申请一实施例中,假设字符串为:string=“my name is bob”,匹配条件为:n=3,m=2,
矩阵数据A如下表3所示:
aaa | aaa | my | aaa | aaa |
m | m | is | b | b |
ccc | y | y | me | ccc |
ddd | ddd | ddd | ddd | ddd |
表3
可以判定矩阵数据A匹配成功,原因为:第二行的每个字段与第三行的第二、三、四字段都可以在字符串string中找到,满足匹配条件。需要说明的是,在匹配过程中,第二行前三个字段匹配成功后,就已经判定第二行满足行匹配条件,后面两个字段无需再进行匹配。每行的字段跟string进行匹配,是在string中查找整个字段,比如字段“y”为匹配成功,而字段“yy”为匹配失败。
在本申请又一实施例中,依然假设字符串为:string=“my name is bob”,匹配条件为:n=3,m=2,待匹配的矩阵数据为以下两个4行5列的矩阵:
aaa | aaa | my | aaa | aaa |
bbb | my | is | bbb | bob |
am | ccc | bo | me | ccc |
ddd | ddd | ddd | ddd | ddd |
矩阵数据1
aaa | aaa | my | aaa | aaa |
bbb | my | is | bbb | bob |
ccc | ccc | ccc | me | ccc |
ddd | ddd | ddd | ddd | ddd |
矩阵数据2
匹配结果为:矩阵数据1匹配成功,矩阵数据2匹配失败。对于矩阵数据1,第二行2,3,5字段和第三行1,3,4字段在字符串string中能找到对应子串,满足匹配成功条件的n=3和m=2,因此匹配成功;而对于矩阵数据2,第二行2,3,5字段在字符串string中能找到对应子串,满足匹配成功条件中的n=3的只有第二行,因此匹配成功的行数只有1行,不满足m=2的匹配成功条件,因此匹配失败。下面以矩阵数据2的具体匹配过程进行说明:
首先取出第一列进行匹配,匹配失败,剩余列数是4>n,再匹配第二列,发现第二行匹配成功,然后对第二行3,4,5字段逐个匹配,发现第二行匹配成功,记录成功并标记,此时匹配成功行数是1<m,未满足第二条件m=2,之后剔除第二行,再对第二列剩余字段进行匹配,匹配失败,剩余列数是3=n,获取第三列数据,并剔除掉第二行数据,进行匹配,发现匹配失败,此时剩余列数为2<n,假设后两列的字段都匹配成功,但每行仅有两个字段匹配成功,不满足成功匹配条件第一条n=3,所以没有必要对后两列进行匹配,则可判定匹配失败。
综上所述,通过本申请所述的矩阵数据的字符串匹配技术,在大多数实际应用场景中无需遍历整个矩阵数据,省去了无用工,大幅度提高匹配效率,在数据库表中快速准确地查找给定字符串的子串。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (12)
1.一种字符串匹配的方法,其中,所述方法包括:
步骤一,确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与字符串进行多模匹配,得到列匹配结果;
步骤二,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;
步骤三,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;
重复循环以上步骤一至步骤三,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。
2.根据权利要求1所述的方法,其中,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,包括:
确定所述列匹配结果中匹配成功的行对应的行数据;
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果。
3.根据权利要求1所述的方法,其中,所述预设的匹配成功条件包括:
一行数据中匹配成功的字段数大于等于n,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;
矩阵数据中总共成功匹配的行数大于等于m,其中,m为自然数。
4.根据权利要求2所述的方法,其中,将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果,包括:
将所述行数据逐字段与字符串进行多模匹配,若已匹配成功的字段数与未处理的字段数之和小于n,则所述行数据的多模匹配结果为匹配失败,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数。
5.根据权利要求2所述的方法,其中,判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,包括:
判断所述矩阵数据的剩余列数是否大于等于n,若否,则所述矩阵数据匹配失败,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数。
6.根据权利要求3所述的方法,其中,根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行,包括:
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据的多模匹配是否满足预设的匹配成功条件中的一行数据中匹配成功的字段数大于等于n,若是,则得到匹配结果为所述行数据匹配成功,并标记所述行数据的行号及记录匹配成功的字段;
若否,则得到匹配结果为所述行数据匹配失败,并标记所述行数据的行号,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数。
7.一种字符串匹配的设备,其中,所述设备包括:
列匹配装置,用于确定矩阵数据的待匹配的列,将所述待匹配的列中的数据与字符串进行多模匹配,得到列匹配结果;
行匹配装置,用于根据预设的匹配成功条件将所述列匹配结果中匹配成功的行中的字段与字符串进行多模匹配,得到多模匹配结果,并标记经过多模匹配的行;
判断装置,用于判断所述矩阵数据的剩余列数是否满足匹配处理条件,若否,则所述矩阵数据匹配失败,若是,则删除标记的行中的字段,从剩余列中重新选取所述矩阵数据的待匹配的列;
重复循环以上列匹配装置、行匹配装置及判断装置中的执行步骤,直至所述矩阵数据无剩余列或剩余列数未满足匹配处理条件。
8.根据权利要求7所述的设备,其中,所述行匹配装置用于:
确定所述列匹配结果中匹配成功的行对应的行数据;
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据中的已匹配成功字段是否满足预设的匹配成功条件,得到多模匹配结果。
9.根据权利要求7所述的设备,其中,所述预设的匹配成功条件包括:
一行数据中匹配成功的字段数大于等于n,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;
矩阵数据中总共成功匹配的行数大于等于m,其中,m为自然数。
10.根据权利要求8所述的设备,其中,所述行匹配装置用于:
将所述行数据逐字段与字符串进行多模匹配,若已匹配成功的字段数与未处理的字段数之和小于n,则所述行数据的多模匹配结果为匹配失败,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数。
11.根据权利要求8所述的设备,其中,所述行匹配装置用于:
判断所述矩阵数据的剩余列数是否大于等于n,若否,则所述矩阵数据匹配失败,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数。
12.根据权利要求9所述的设备,其中,所述行匹配装置用于:
将所述行数据逐字段与字符串进行多模匹配,判断所述行数据的多模匹配是否满足预设的匹配成功条件中的一行数据中匹配成功的字段数大于等于n,若是,则得到匹配结果为所述行数据匹配成功,并标记所述行数据的行号及记录匹配成功的字段,其中,1≤n≤j,j为矩阵数据的列数,n和j为自然数;
若否,则得到匹配结果为所述行数据匹配失败,并标记所述行数据的行号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710305409.8A CN107153692B (zh) | 2017-05-03 | 2017-05-03 | 一种字符串匹配的方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710305409.8A CN107153692B (zh) | 2017-05-03 | 2017-05-03 | 一种字符串匹配的方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107153692A CN107153692A (zh) | 2017-09-12 |
CN107153692B true CN107153692B (zh) | 2021-02-19 |
Family
ID=59793280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710305409.8A Active CN107153692B (zh) | 2017-05-03 | 2017-05-03 | 一种字符串匹配的方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107153692B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111027794B (zh) * | 2019-03-29 | 2023-09-26 | 广东小天才科技有限公司 | 一种听写作业的批改方法及学习设备 |
CN111581461B (zh) * | 2020-06-19 | 2023-04-25 | 腾讯科技(深圳)有限公司 | 字符串搜索方法、装置、计算机设备及介质 |
CN117112609B (zh) * | 2023-06-29 | 2024-05-10 | 南京国电南自轨道交通工程有限公司 | 一种使用关键元素矩阵提高监控历史数据检索效率的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6556990B1 (en) * | 2000-05-16 | 2003-04-29 | Sun Microsystems, Inc. | Method and apparatus for facilitating wildcard searches within a relational database |
CN102163221A (zh) * | 2011-04-02 | 2011-08-24 | 华为技术有限公司 | 模式匹配方法和装置 |
CN103559266A (zh) * | 2013-11-04 | 2014-02-05 | 中国科学院声学研究所 | 多模式匹配方法及装置 |
CN103678651A (zh) * | 2013-12-20 | 2014-03-26 | Tcl集团股份有限公司 | 一种敏感词查找方法及装置 |
-
2017
- 2017-05-03 CN CN201710305409.8A patent/CN107153692B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6556990B1 (en) * | 2000-05-16 | 2003-04-29 | Sun Microsystems, Inc. | Method and apparatus for facilitating wildcard searches within a relational database |
CN102163221A (zh) * | 2011-04-02 | 2011-08-24 | 华为技术有限公司 | 模式匹配方法和装置 |
CN103559266A (zh) * | 2013-11-04 | 2014-02-05 | 中国科学院声学研究所 | 多模式匹配方法及装置 |
CN103678651A (zh) * | 2013-12-20 | 2014-03-26 | Tcl集团股份有限公司 | 一种敏感词查找方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107153692A (zh) | 2017-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3767483B1 (en) | Method, device, system, and server for image retrieval, and storage medium | |
JP6028567B2 (ja) | データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 | |
CN107025239B (zh) | 敏感词过滤的方法和装置 | |
CN110597852B (zh) | 数据处理方法、装置、终端及存储介质 | |
CN107153692B (zh) | 一种字符串匹配的方法及设备 | |
US11570196B2 (en) | Method for determining duplication of security vulnerability and analysis apparatus using same | |
CN112579623B (zh) | 存储数据的方法、装置、存储介质及设备 | |
CN111368289B (zh) | 一种恶意软件检测方法和装置 | |
US20110238708A1 (en) | Database management method, a database management system and a program thereof | |
US20230205755A1 (en) | Methods and systems for improved search for data loss prevention | |
CN106294886A (zh) | 一种从HBase中全量抽取数据的方法及系统 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN113868698A (zh) | 一种文件脱敏方法及设备 | |
US10114951B2 (en) | Virus signature matching method and apparatus | |
CN107590233B (zh) | 一种文件管理方法及装置 | |
CN111026736B (zh) | 数据血缘管理方法及装置、数据血缘解析方法及装置 | |
CN110019357B (zh) | 数据库查询脚本生成方法及装置 | |
KR102503028B1 (ko) | 블룸필터를 이용한 분산식별자 검색 방법 | |
CN111914252A (zh) | 文件安全性的检测方法、装置和电子设备 | |
US8533694B2 (en) | Identification of read/write chains during static analysis of computer software | |
CN112988457A (zh) | 一种数据备份方法、装置、系统及计算机设备 | |
CN109446226B (zh) | 一种数据集合确定的方法及设备 | |
WO2024017100A1 (zh) | 获取代码片段的方法、装置及存储介质 | |
CN108279990B (zh) | 一种系统检查方法、装置及电子设备 | |
CN110858852A (zh) | 一种注册域名的获取方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |