CN102063510A - 字符串的匹配查找方法 - Google Patents
字符串的匹配查找方法 Download PDFInfo
- Publication number
- CN102063510A CN102063510A CN 201110008995 CN201110008995A CN102063510A CN 102063510 A CN102063510 A CN 102063510A CN 201110008995 CN201110008995 CN 201110008995 CN 201110008995 A CN201110008995 A CN 201110008995A CN 102063510 A CN102063510 A CN 102063510A
- Authority
- CN
- China
- Prior art keywords
- character
- character string
- string
- text
- jumping
- 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)
Abstract
本发明提供一种字符串的匹配查找方法,包括建表步骤:依需查找的字符串确定查找过程中遇到预先设定位数的字符个数的任意字符时字符串的跳进距离,建立跳进表格;对齐步骤:将字符串的第一个字符与文本第一个字符对齐;跳进步骤:查询文本中与字符串倒数设定位数个字符对齐的判别字符,根据判别字符查询跳进表格,确定字符串的跳进距离,字符串向后跳进;重复执行跳进步骤到达预先设定次数;比较步骤:自字符串最后一位字符开始,判断字符串的每一字符跟文本中与该字符串每一字符所对齐的字符是否相同,若相同,则比较下一字符,直至查找到匹配的字符串,若不相同,返回执行跳进步骤。本发明能快速地查找需要匹配的字符串,查找时间短且效率高。
Description
技术领域
本发明涉及数据识别查找技术领域,尤其涉及一种在文本中进行字符串匹配查找的方法。
背景技术
随着计算机、电子阅读器、MP4等电子设备的普及,电子文本的文件档案广泛地应用在文件编辑、网页设计等方方面面。对电子文本的编辑过程中,经常需要在文本中查询某一特定的字符或字符串,对于单个字符的匹配查找,通常是将需要查找的字符与文本中每一字符进行逐一对比,查找出相应的字符。对于字符串的查找,则有多种不同的查找方法,包括从后向前查找、从前向后查找、从前后两端同时查找等,目前最为常用的查找方法是BM算法。
需要说明的是,本文所说的“字符”均是通用的ASCII码,一共256个字符。参见图1,应用BM算法时,首先需要将匹配查找的字符串P与文本T左对齐,也就是将字符串P的第一个字符P1与文本T中的第一个字符T1对齐。本文所说的“对齐”是指需要匹配查找的字符串中的一个字符与文本的一个字符建立对应关系,此时,字符串的其他字符也与文本中的部分字符建立对应关系,以首先建立对应关系的两个字符为基准,字符串中其他字符与该基准字符之间的位数等于文本中其他字符与基准字符之间的位数。如图1所示,字符P1与字符T1对齐,则位于字符P1后一位的字符P2与位于字符T1后一位的字符T2对齐,以此类推。
图1所示的例子中,文本T为“abcecabc”,需要匹配查找的字符T为“abcab”,因此文本T的前五个字符与字符P中的五个字符分别对齐。
将字符串P与文本T左对齐后,从字符串P最后一个字符开始与文本的字符进行比较,即将字符P5跟与字符P5对齐的字符T5进行比较。若字符T5与字符P5相同,则从右至左逐一比较余下的字符。若比较过程中发现任一字符不相同,则启动两条规则,即坏字符规则与好后缀规则。
应用坏字符规则时,首先判断与字符串P不相同的文本T中的字符是否在字符串P的其他位置出现,例如图1所示的例子中,判断字符T5与字符P5不相同后,则判断字符T5是否与字符串P的其他字符相同。这一过程需要将字符T5与字符串P中的所有字符进行逐一比较分析比较,消耗较长的时间。
若判断字符T5与字符串P中任一字符均不相同,则字符串P向后移动,移动的位数是字符串P的长度,即字符串P的第一个字符P1将与文本T的第六个字符T6对齐,再次从右至左逐一比较两两对齐的字符。
如图1所示的例子,字符T5为“c”,其与字符串P中的字符P3相同,因此需要将字符串P向后移动若干位,使得字符P3与字符T5对齐,如图2所示。然后,再从右至左逐一比较两两对齐的字符,即字符T7与字符P5比较,字符T6与字符P4比较,以此类推。
由于BM算法中,字符串P每向后跳进一次,均需要访问文本中与字符串最后一个字符对齐的字符,在比较文本中的字符与字符串最后一个字符不相等后,需要将该字符与字符串中其他字符进行一次比较分析。在实际应用中,由于字符串最后一个字符跟文本中与其对齐的字符不相等的情况是最为普遍的情况,因此在字符串每次跳进后执行上述操作将消耗大量的时间,导致字符串匹配查找的效率低下。
此外,应用BM算法查找匹配的字符时,为了避免向后跳进时跳出文本的边界,在每次跳进后均需要判断是否到达文本的最后一个字符,执行该判断也消耗大量的时间,导致字符串匹配查找的效率不高。
发明内容
本发明的目的是提供一种效率较高的字符串的匹配查找方法。
为此,本发明提供的字符串匹配查找方法包括以下步骤:
建表步骤:依需查找的字符串确定查找过程中遇到预先设定位数的字符个数的任意字符时字符串的跳进距离,建立跳进表格;
对齐步骤:将字符串的第一个字符与文本的第一个字符对齐;
跳进步骤:查询文本中与字符串倒数设定位数个字符对齐的判别字符,根据判别字符查询跳进表格,确定字符串的跳进距离,字符串向后跳进该跳进距离;
重复执行跳进步骤到达预先设定次数;
比较步骤:自字符串最后一位字符开始,判断字符串的每一字符跟文本中与该字符串每一字符所对齐的字符是否相同,若相同,则比较下一字符,直至查找到匹配的字符串;若不相同,返回执行跳进步骤。
由上述方案可见,查找匹配字符串时,不需要将文本中的字符与字符串中的所有字符进行逐一比较,而是直接根据跳进表格进行多次跳进,并在多次跳进后进行一次比较,这样可大大减少匹配过程所消耗的时间,提高字符串匹配查找的效率。
一个优选的方案是,比较步骤中比较下一字符时,若下一字符跟文本中与该字符对齐的字符不相同,则字符串向后跳进一位,返回执行跳进步骤。
由此可见,比较过程不是将文本的字符与字符串的所有字符进行逐一比较,而是一旦发现有不同的字符,即马上返回执行跳进步骤,也能减少匹配查找过程中的时间消耗。
进一步的方案是,执行对齐步骤后、跳进步骤前,在文本最后一个字符后增加一组字符串形成扩展文本,查找到匹配的字符串后,判断是否到达扩展文本的最后字符。
可见,查找匹配的字符串过程中,无需每跳进一次判断是否超出文本边界,只有在查找到匹配的字符串后才进行一次判断工作,也大大减少在判断是否超出文本边界时所消耗的时间,提高字符串匹配查找的效率。
再进一步的方案是,建表步骤还包括去掉字符串的最后一位字符形成辅助字符串,根据辅助字符串建立辅助跳进表格;跳进步骤还包括重复执行跳进步骤到达设定次数后,查询文本中与辅助字符串倒数设定位数个字符对齐的辅助判别字符,根据辅助判别字符查询辅助跳进表格,确定字符串的跳进距离,字符串向后跳进相应位数。
这样,通过辅助字符串及辅助跳进表格辅助字符串的跳进,可有效避免因文本中出现连续多个与字符串最后一个字符相同的字符而导致字符串多次不跳进或跳进距离过短,从而提高字符串的匹配查找效率。
此外,本发明提供的字符串匹配查找方法还可以是通过以下步骤实现:
建表步骤:在需要查找的原字符串后添加与原字符串相同的扩展字符串形成对比字符串,根据对比字符串确定查找过程中遇到任意一对字符时对比字符串的跳进距离,建立跳进表格;
对齐步骤:将对比字符串的第一个字符与文本的第一个字符对齐;
跳进步骤:查询文本中与原字符串最后一位字符对齐的第一判别字符以及与扩展字符串最后一位字符对齐的第二判别字符,根据第一判别字符及第二判别字符查询跳进表格,确定对比字符串的跳进距离,对比字符串向后跳进该跳进距离;
重复执行跳进步骤到达预先设定次数;
比较步骤:判断原字符串最后一字符跟文本中与原字符串最后一字符所对齐的字符是否相同,并判断扩展字符串的最后一字符跟文本中与扩展字符串最后一字符所对齐的字符是否相同,若上述判断结果为任一相同,则比较结果为相同的一组字符串的余下字符,直至查找到匹配的字符串,若上述判断结果为均不相同,返回执行所述跳进步骤。
由上述方案可见,字符串匹配过程中无需将文本的字符与字符串中所有字符进行逐一比较分析,可减少因逐一比较分析所消耗的时间,提高了字符串匹配查找的效率。此外,在原字符串后添加扩展字符串,可同时对原字符串与扩展字符串进行比较,跳进的距离更长,有利于对比字符串的快速跳进,可更快地查找出匹配的字符串。
一个优选的方案是,比较步骤中比较余下字符时,若余下字符中任一字符跟文本中与该字符对齐的字符不相同,则对比字符串向后跳进一位,返回执行所述跳进步骤。
由此可见,在比较步骤后,文本的字符也不需要与字符串中所有字符进行逐一比较,一旦发现有不相同的字符,即马上跳进,减少不必要的时间消耗,提高匹配查找的效率。
附图说明
图1是现有字符串匹配查找方法中字符串与文本对齐的示意图。
图2是现有字符串匹配查找方法中字符串跳进后的示意图。
图3是本发明第一实施例中建立跳进表格的分析原理图。
图4是本发明第一实施例中建立的跳进表的结构图。
图5是本发明第一实施例匹配查找字符的示意图。
图6是本发明第一实施例中建立的辅助跳进表的结构图。
图7是本发明第一实施例中应用辅助跳进表格进行匹配查找字符的示意图。
图8是本发明第二实施例中建立的跳进表的结构图。
图9是本发明第二实施例匹配查找字符的示意图。
图10是本发明第三实施例中建立的跳进表的结构图。
图11是本发明第三实施例匹配查找字符的示意图。
以下结合附图及实施例对本发明作进一步说明。
具体实施方式
本发明的构思是通过建立跳进表格,根据跳进表格确定字符串的跳进距离,从而避免每一次跳进后对字符串每一字符的循环比较分析,减少字符比较所消耗的时间。
为了确保字符串匹配查找的快速进行,需要以文本长度与字符串长度为基准,区分多种不同情况下所使用的具体方法。因此,可设置一个文本长度阈值以及字符串长度阈值,执行字符串匹配查找前,首先对文本长度及字符串长度进行判断,以确定使用哪一种具体的方式。
例如,设定文本长度阈值为100k,字符串长度阈值为8个字符,则在执行字符串匹配查找前,首先判断文本长度是否小于或等于文本长度阈值,若小于或等于,则使用第一实施例的方法实现字符串的匹配查找,如文本长度大于文本长度阈值,则进一步判断字符串的长度是否大于字符串长度阈值,若小于或等于,则使用第二实施例的方法,否则使用第三实施例的方法。
应该说明的是,依据文本长度与字符串长度划分出多种不同的具体实现的方法更能凸显本发明的优越性;然而,无论文本长度与字符串长度如何,均使用以下第一实施例或第二实施例的方法也能较现有技术提高字符串的匹配查找速度。
第一实施例。
如前述,对字符串匹配查找时,可先判断文本长度及需要匹配查找的字符串长度,在判断文本长度小于或等于100k时,优先选用本实施例。
本实施例需要匹配查找的字符串为“match”,字符串长度为5位。本实施例字符串跳进原则与现有的BM算法一致,即与字符串最后一个字符对齐的字符没有在字符串中出现,字符串向后跳进,跳进距离与字符串的长度相等,若与字符串最后字符对齐的字符在字符串中存在,则字符串向后跳进以使字符串及文本中的两个相同的字符对齐。
参见图3,假设标号为“1”的行(以下简称行1,以此类推)为文本,行2为字符串,跳进时以字符串最后一个字符为判断依据,即位数为“4”的字符“h”,也就是“*”号所指向的字符。
若文本中与字符“h”对齐的字符不是字符串中的字符,如图3中的“p”,则字符串向后跳进5位,记为
jump[‘p’]=5 (式1)
同理,遇到其他不是“match”中任一字符的字符,字符串均跳进5位,如行8所示。
若与字符“h”对齐的字符为“h”,则字符串不跳进,记为
jump[‘h’]=0 (式2)
若与字符“h”对齐的字符为“c”,则字符串向后跳进1位,记为
jump[‘c’]=1 (式3)
以此类推,可得到以下式子:
jump[‘t’]=2 (式4)
jump[‘a’]=3 (式5)
jump[‘m’]=4 (式6)
因此,可建立一个一维的数组,并以此建立一个跳进表格,如图4所示,表格的第一行为与字符串最后一个字符对齐的文本字符,第二行为字符串跳进的位数。字符串匹配查找时,判断与字符串最后一位字符对齐的字符是哪一字符,通过查询跳进表可确定字符串的跳进距离。
如图5所示,假设文本为“china what you not only match huge”,需要匹配的字符串为“match”。对字符串进行匹配查找时,首先将字符串与文本左对齐,即字符串的第一个字符与文本的第一个字符对齐。然后,查询与字符串最后一个字符对齐的字符,即行3中“*”号指向的字符,该字符为“a”,通过查询跳进表格,字符串向后跳进3位,如行4所示。然后,再次查询与字符串中最后字符对齐的字符,查询到该字符为“h”,然后通过查询跳进表格判断字符串的跳进距离,即0位,表示不跳进。
此时,字符串将继续重复查询与字符串最后一位字符对齐的文本字符,重复执行的次数可预先设定,且根据字符串最后一位字符决定。若字符串最后一位字符为通常文本文件中出现频率较高的字符,如a、e、t、空格等,则设定重复执行跳进步骤的次数较少,若最后一个字符为出现频率较低的字符,如z等,可设定重复执行的次数较多。字符的出现频率通过对大量文件分析获得,因此是预先设定好的,且每一字符对应的设定次数也是预先设定好的,只要获知字符串的最后一个字符,即可相应地确定该字符串需要连续执行多少次跳进。
例如,根据预先设定的次数,对于字符“h”,设定次数为5次,则字符串需要连续执行5次跳进。因此,如图5所示的例子中,字符串后4次的跳进均为0位,也就是浪费了4次的跳进。
进行5次跳进后,对字符串进行一次比较,比较是从字符串最后一位开始,逐一地比较字符串每一字符以及与该字符对齐的文本字符,由于与字符串倒数第二位对齐的字符跟该字符不相同,因此不需要再进行比较分析,字符串向后跳进一位,再次进行查询判断。
再次查询时,与字符“h”对齐的字符为“a”,如行6所示,字符串向后跳进3位,并再次查询跳进,之后多次查询的结果中,与字符串最后一个字符对齐的文本字符分别是“y”、“o”、“l”,这些字符均不在字符串中,因此字符串每次跳进5位,到第四次跳进后,与字符“h”对齐的字符为“t”,根据跳进表格,字符串跳进2位,如行16所示。
此时,字符串进行比较分析,通过分析可知字符串位于行16的位置时与文本中的字符串完全相同,即查找到匹配的字符串。
由上述方案可见,字符串的匹配查找过程中,字符串是根据与最后一个字符对齐的文本字符查询跳进表格,并确定字符串的跳进距离,因此无需在每次跳进后对字符串的每一字符进行比较分析,减少了字符的比较分析时间,从而提高字符串的匹配查询效率。
字符串跳进时,需要判断是否超出文本的长度,也就是判断是否到达文本的最后一个字符,若每次跳进时进行判断,则浪费大量的时间。因此,本实施例中,在文本最后一个字符后添加一组与需要查找的字符串相同的字符串,只有查询到匹配的字符串后,才判断是否超出文本长度,这样能减少判断是否超出文本长度的时间,更能提高字符串的匹配查找效率。
此外,若文本中存在连续多个与字符串最后一个字符相同的字符,如图7行1所示的情况,文本中存在连续多个字符“h”,会导致字符串连续多次跳进距离为0,即无法形成有效跳进。因此,需要设置一个辅助跳进表格以辅助跳进。
设置辅助跳进表格时,首先定义辅助字符串,辅助字符串是将原字符串的最后一个字符去掉后所得到的字符串,本实施例中,辅助字符串为“matc”,然后确定每一对于字符的跳进距离,其计算方法与前述的建立跳进表格时的计算方法相同,所建立的辅助跳进表格如图6所示。此时,若遇到字符“h”,其跳进距离是4位。
参见图7,若字符串跳进时遇到连续多个与字符串最后一位字符相同的字符,如行4所示,字符串将无法进行有效跳进,因为每次跳进距离均为0。因此,需要字符串每跳进若干次后应用辅助字符串进行辅助跳进,字符串跳进的次数根据字符串最后一位字符确定,即与前述的设定次数相同。例如,对于字符“h”而言,设定次数为5次,则字符串每跳进5次后需要辅助跳进一次。
图7中行4所示,字符串多次跳进距离为0,因此应用辅助跳进表格,也就是与查询与辅助字符串最后一个字符“c”对齐的字符,该字符为“o”,则字符串跳进4位,如行8所示,字符串跳进后成功跳过连续多个字符“h”,避免多次无效跳进。
可见,通过设置辅助跳进字符串以及辅助跳进表格,能有效提高字符串的跳进效率,从而提高字符串的匹配查询效率。
上述实施例是针对文本的长度小于或等于100k的情况,当文本的长度大于100k时,本实施例的效率仍不够理想,因此需要使用改进的方法实现。当判断文本的长度大于100k时,则进一步判断需要匹配的字符串的长度是否大于字符串长度阈值,如8位,若小于或等于,则采用第二实施例的方法。
第二实施例。
本实施例大致与第一实施例相同,不同之处是在原字符串后添加一组与原字符串相同的扩展字符串形成对比字符串,应用对比字符串与文本的字符进行匹配并跳进。
应用本方法时,需要建立跳进表格,此时跳进表格为一个二维的数组,如图8所示,表格的第一行为与原字符串最后一个字符对齐的字符,第一列为与扩展字符串最后一个字符对齐的字符,表格中的数据为跳进的位数。因此,若与原字符串最后一个字符对齐的字符为“t”,与扩展字符串最后一个字符对齐的字符为“m”,则字符串的跳进的位数为2为,以此类推。
参见图9,进行字符串查找时,首先将对比字符串与文本左对齐,即对比字符串的第一个字符与文本的第一个字符对齐,如图9的行2所示。然后,查询与原字符串最后一个字符对齐的字符及与扩展字符串最后一个字符对齐的字符,分别为“a”、“t”,通过查询跳进表格可知,对比字符串需要向后跳进3位,如行2所示。然后再次进行查询,查询结果是一对字符“h”、“o”,因此跳进距离为0。
经过预定此时的跳进后,开始比较对比字符串。比较时,从原字符串的最后一位开始比较,同时从扩展字符串的最后一个开始比较,任一组字符串的最后一个字符跟与其对齐的字符相同,则继续对比该组字符串的余下字符。
如行4中,与原字符串最后一个字符对齐的字符跟该字符相同,但扩展字符串的最后一个字符跟与其对齐的字符不相同,则只对比原字符串中余下的字符。由于原字符串的倒数第二个字符跟与其对齐的字符不相同,因此对比字符串向后跳进1位,如行6所示,并重复进行查询、跳进。当然,本实施例也是根据原字符串最后一个字符确定对比字符串跳进的设定次数。
向后跳进1位后,查询到的字符分别为“a”、“u”,根据跳进表格,对比字符串向后跳进3位,跳进后再次进行查询,查询到的字符分别是“y”、“o”,则对比字符串跳进10位,再次查询结果是“l”、“t”,因此对比字符串跳进7位,由于此时的查询结果为“h”、“e”,因此对比字符串跳进距离为0。
然后,通过对原字符串的每一字符与相应字符对齐的文本字符进行比较分析,查找出相匹配的字符串。
本实施例实际上是应用两个原字符串同时进行查询跳进,跳进的距离更长,可更有效地提高字符串匹配查询效率。
此外,为了避免每次跳进均需要判断是否超出文本边界,可在文本最后一个字符后添加两组与原字符串相同的字符串形成扩展文本,跳进时无需判断是否超出文本边界,只有查询到匹配的字符串时才进行判断。当然,查询完毕后需要将所添加的两组原字符串删除。
并且,本实施例也设置辅助跳进字符串以及辅助跳进表格,辅助跳进字符串是在原字符的基础上删除最后一位字符获得,其与第一实施例的辅助字符串相同,因此建立的辅助跳进表格也相同。因辅助跳进字符串与辅助跳进表格用于辅助跳进,无需建立二维数据,因此应用与第一实施例相同的方法设置辅助字符串及辅助跳进表格即可。
由于建立二维的跳进表格需要消耗一定的时间,因此对于文本长度较小的文本,采用第二实施例将造成实际的浪费,选用第一实施例的方法可有效对小于或等于100k的文本进行字符串的匹配查找。
第三实施例。
对于文本的长度大于文本长度阈值,且字符串长度也大于字符串长度阈值,如8个字符的情况,由于文本字符与字符串最后一个字符相同的几率较高,本实施例将造成扩展字符串无法体现其作用,因此需要同时查询文本的两位字符,判断该两位字符是否与字符串中最后两位字符相同来实现跳进。
本实施例也需要建立跳进表格,假设需要匹配查找的字符为“onlymatch”,一共9个字符。如图10所示,表格的第一行表示与字符串倒数第二个字符对齐的字符,第一列表示与字符串最后一个字符对齐的字符,表格内的数据是跳进距离。例如,与字符串最后两位字符对齐的字符是“qm”,则字符串的跳进距离是9位,若与字符串最后两位字符对齐的字符是“ma”,则字符串的跳进的位数为3位,以此类推。
参见图11,假设文本最前端的字符是“china what you not onlymatch”,进行字符串匹配查询时,首先将字符串与文本左对齐,如图11中的行2所示。然后,将查询与字符串最后两位字符对齐的文本字符,即查询与“ch”对齐的两个文本字符,查询结果为“ha”,通过查询跳进表格可知,字符串的跳进的位数为9位,因此字符串向后跳进9位,如行4所示。
跳进后,重复进行查询与跳进操作,由于再次查询结果为“ot”,字符串向后跳进9位,并再次查询。此时,查询结果为“ct”,通过查询跳进表格可知,字符串向后跳进1位,如行8所示。若字符串的跳进次数未达到设定次数,则继续跳进。但由于此时查询与字符串最后两位字符对齐的文本字符为“ch”,通过查询跳进表格,字符串跳进距离为0,即字符串不进行有效跳进。
当字符串跳进次数达到设定次数后,自字符串的最后一位开始进行比较分析,通过比较分析判断与字符串对齐的一串文本字符是否为匹配的字符串。如图11所示的,字符串经过3次有效跳进即查找到与其匹配的字符串,查询效率较高。
与第一实施例相同,可根据字符串最后一位字符确定字符串经过多少次跳进后进行一次比较,即设定次数。此外,还可以将字符串的最后一位字符去掉形成辅助跳进字符串,并根据辅助跳进字符串建立辅助跳进表格。当字符串跳进达到设定次数后,使用辅助跳进表格进行一次辅助跳进。
当然,为避免字符串每次跳进时判断是否超出文本边界,可在文本最后一个字符后添加一组需要匹配查找的字符串形成扩展文本,这样,可仅在查找到匹配的字符串后才判断是否到达文本边界,大大减少因判断是否到达文本边界而进行的判断,从而减少时间的消耗。
若字符串中出现两个或多个相同的字符,在建立跳进表格或辅助跳进表格时,以跳进的位数最少的该字符作为字符串遇到该字符时的跳进判断基准。
可见,使用上述方法对字符串进行匹配查找时,仅在字符串经过多次跳进后进行一次比较分析,而不需要在每次字符串跳进后进行比较分析,能减少字符串匹配查找过程所消耗的时间,提高字符串匹配查找的效率。
当然,上述实施例仅是本发明较佳的实施方案,实际应用时还可以有更多的变化,例如,在需要匹配查找的字符串长度更长时,使用与字符串最后三位字符对齐的文本字符作为对比分析的对象,或者,在字符串最后两个字符相同的情况下,可去掉最后两个字符作为辅助字符串等,这些改变也能实现本发明的目的。
最后需要强调的是,本发明不限于上述实施方式,如跳进步骤重复执行设定次数的改变、查询字符的设定位数的改变等变化也应该包括在本发明权利要求的保护范围内。
Claims (10)
1.字符串的匹配查找方法,包括
建表步骤:依需查找的字符串确定查找过程中遇到预先设定位数的字符个数的任意字符时所述字符串的跳进距离,建立跳进表格;
对齐步骤:将所述字符串的第一个字符与文本的第一个字符对齐;
跳进步骤:查询所述文本中与所述字符串倒数设定位数个字符对齐的判别字符,根据所述判别字符查询所述跳进表格,确定所述字符串的跳进距离,所述字符串向后跳进所述跳进距离;
重复执行所述跳进步骤到达预先设定次数;
比较步骤:自所述字符串最后一位字符开始,判断所述字符串的每一字符跟所述文本中与所述字符串每一字符所对齐的字符是否相同,若相同,则比较下一字符,直至查找到匹配的字符串;若不相同,返回执行所述跳进步骤。
2.根据权利要求1所述字符串的匹配查找方法,其特征在于:
所述比较步骤中比较下一字符时,若所述下一字符跟所述文本中与该字符对齐的字符不相同,则所述字符串向后跳进一位,返回执行所述跳进步骤。
3.根据权利要求1所述字符串的匹配查找方法,其特征在于:
所述建表步骤还包括判断所述文本的文本长度是否小于或等于文本长度阈值,如是,设定所述设定位数为一位。
4.根据权利要求3所述字符串的匹配查找方法,其特征在于:
如所述文本长度大于所述文本长度阈值,则进一步判断所述字符串的字符串长度是否大于字符串长度阈值,如是,设定所述设定位数为二位。
5.根据权利要求1至4任一项所述字符串的匹配查找方法,其特征在于:
执行所述对齐步骤后、所述跳进步骤前,在所述文本最后一个字符后增加一组所述字符串形成扩展文本;
查找到所述匹配的字符串后,判断是否到达所述扩展文本的最后字符。
6.根据权利要求1至4任一项所述字符串的匹配查找方法,其特征在于:
执行所述建表步骤前,根据所述字符串的最后一个字符确定在所述跳进步骤后重复执行所述跳进骤的所述设定次数。
7.根据权利要求1至4所述字符串的匹配查找方法,其特征在于:
所述建表步骤中还包括去掉所述字符串的最后一位字符形成辅助字符串,根据所述辅助字符串建立辅助跳进表格;
所述跳进步骤还包括重复执行所述跳进步骤到达所述设定次数后,查询所述文本中与所述辅助字符串倒数所述设定位数字符个数对齐的辅助判别字符,根据所述辅助判别字符查询所述辅助跳进表格,确定所述字符串的辅助跳进距离,所述字符串向后跳进所述辅助跳进距离。
8.字符串的匹配查找方法,包括
建表步骤:在需要查找的原字符串后添加与所述原字符串相同的扩展字符串形成对比字符串,根据所述对比字符串确定查找过程中遇到任意一对字符时所述对比字符串的跳进距离,建立跳进表格;
对齐步骤:将所述对比字符串的第一个字符与文本的第一个字符对齐;
跳进步骤:查询所述文本中与所述原字符串最后一位字符对齐的第一判别字符以及与所述扩展字符串最后一位字符对齐的第二判别字符,根据所述第一判别字符及所述第二判别字符查询所述跳进表格,确定所述对比字符串的跳进距离,所述对比字符串向后跳进所述跳进距离;
重复执行所述跳进步骤到达预先设定次数;
比较步骤:判断所述原字符串最后一字符跟所述文本中与所述原字符串最后一字符所对齐的字符是否相同,并判断所述扩展字符串的最后一字符跟所述文本中与所述扩展字符串最后一字符所对齐的字符是否相同,若上述判断结果为任一相同,则比较结果为相同的一组字符串的余下字符,直至查找到匹配的字符串,若上述判断结果为均不相同,返回执行所述跳进步骤。
9.根据权利要求8所述字符串的匹配查找方法,其特征在于:
所述比较步骤中比较余下字符时,若所述余下字符中任一字符跟所述文本中与该字符对齐的字符不相同,则所述对比字符串向后跳进一位,返回执行所述跳进步骤。
10.根据权利要求8或9所述字符串的匹配查找方法,其特征在于:
执行所述对齐步骤后、所述跳进步骤前,在所述文本最后一个字符后增加二组所述原字符串形成扩展文本;
查找到匹配字符串后,判断是否到达所述扩展文本的最后字符。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110008995A CN102063510B (zh) | 2011-01-17 | 2011-01-17 | 字符串的匹配查找方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110008995A CN102063510B (zh) | 2011-01-17 | 2011-01-17 | 字符串的匹配查找方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102063510A true CN102063510A (zh) | 2011-05-18 |
CN102063510B CN102063510B (zh) | 2012-08-29 |
Family
ID=43998785
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110008995A Active CN102063510B (zh) | 2011-01-17 | 2011-01-17 | 字符串的匹配查找方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102063510B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779173A (zh) * | 2012-06-25 | 2012-11-14 | 北京奇虎科技有限公司 | 网页文本高亮显示方法及系统 |
CN103218379A (zh) * | 2012-01-19 | 2013-07-24 | 北京千橡网景科技发展有限公司 | 用于解析图释的方法及装置 |
CN103425739A (zh) * | 2013-07-09 | 2013-12-04 | 国云科技股份有限公司 | 一种字符串匹配算法 |
CN103888506A (zh) * | 2012-12-20 | 2014-06-25 | 国际商业机器公司 | 提取监控请求-响应对的规则的计算机实现方法和系统 |
CN105574108A (zh) * | 2015-12-14 | 2016-05-11 | 东南大学 | 一种继电保护自动测试系统中字符串比较的方法和系统 |
CN105589838A (zh) * | 2015-12-24 | 2016-05-18 | 中国电子科技集团公司第三十三研究所 | 一种基于文件比较的电子公文痕迹保留方法 |
CN105989099A (zh) * | 2015-02-13 | 2016-10-05 | 晨星半导体股份有限公司 | 相关资讯显示方法以及可自动显示相关资讯的电子装置 |
CN107239500A (zh) * | 2017-05-03 | 2017-10-10 | 成都国腾实业集团有限公司 | 一种字符串匹配方法及系统 |
CN110008383A (zh) * | 2019-04-11 | 2019-07-12 | 北京安护环宇科技有限公司 | 一种基于多索引的黑白名单检索方法及装置 |
CN110147429A (zh) * | 2019-04-15 | 2019-08-20 | 平安科技(深圳)有限公司 | 文本比较方法、装置、计算机设备和存储介质 |
CN110362763A (zh) * | 2019-07-16 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 数据排序方法、数据排序装置、介质及电子设备 |
CN111090982A (zh) * | 2018-10-24 | 2020-05-01 | 迈普通信技术股份有限公司 | 文本比较方法、装置、电子设备及计算机可读存储介质 |
CN111581459A (zh) * | 2020-06-13 | 2020-08-25 | 中国电子信息产业集团有限公司第六研究所 | 一种字符串匹配方法及字符串匹配系统 |
CN112069303A (zh) * | 2020-09-17 | 2020-12-11 | 四川长虹电器股份有限公司 | 字符串的匹配查找方法、装置及终端 |
CN112434153A (zh) * | 2020-12-16 | 2021-03-02 | 中国计量大学上虞高等研究院有限公司 | 基于ELMo和卷积神经网络的垃圾信息过滤方法 |
CN113609352A (zh) * | 2021-08-03 | 2021-11-05 | 北京恒安嘉新安全技术有限公司 | 字符串检索方法、装置、计算机设备及存储介质 |
CN113836367A (zh) * | 2021-09-26 | 2021-12-24 | 杭州迪普科技股份有限公司 | 一种字符反向匹配的方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007257189A (ja) * | 2006-03-22 | 2007-10-04 | Casio Comput Co Ltd | 辞書検索装置及びその制御プログラム |
CN101165681A (zh) * | 2006-10-17 | 2008-04-23 | 中兴通讯股份有限公司 | 一种通信系统中字符串匹配信息的处理方法 |
CN101901257A (zh) * | 2010-07-21 | 2010-12-01 | 北京理工大学 | 一种多字符串匹配方法 |
-
2011
- 2011-01-17 CN CN201110008995A patent/CN102063510B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007257189A (ja) * | 2006-03-22 | 2007-10-04 | Casio Comput Co Ltd | 辞書検索装置及びその制御プログラム |
CN101165681A (zh) * | 2006-10-17 | 2008-04-23 | 中兴通讯股份有限公司 | 一种通信系统中字符串匹配信息的处理方法 |
CN101901257A (zh) * | 2010-07-21 | 2010-12-01 | 北京理工大学 | 一种多字符串匹配方法 |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218379A (zh) * | 2012-01-19 | 2013-07-24 | 北京千橡网景科技发展有限公司 | 用于解析图释的方法及装置 |
CN102779173A (zh) * | 2012-06-25 | 2012-11-14 | 北京奇虎科技有限公司 | 网页文本高亮显示方法及系统 |
CN103888506A (zh) * | 2012-12-20 | 2014-06-25 | 国际商业机器公司 | 提取监控请求-响应对的规则的计算机实现方法和系统 |
CN103425739A (zh) * | 2013-07-09 | 2013-12-04 | 国云科技股份有限公司 | 一种字符串匹配算法 |
CN103425739B (zh) * | 2013-07-09 | 2016-09-14 | 国云科技股份有限公司 | 一种字符串匹配方法 |
CN105989099A (zh) * | 2015-02-13 | 2016-10-05 | 晨星半导体股份有限公司 | 相关资讯显示方法以及可自动显示相关资讯的电子装置 |
CN105574108A (zh) * | 2015-12-14 | 2016-05-11 | 东南大学 | 一种继电保护自动测试系统中字符串比较的方法和系统 |
CN105589838A (zh) * | 2015-12-24 | 2016-05-18 | 中国电子科技集团公司第三十三研究所 | 一种基于文件比较的电子公文痕迹保留方法 |
CN105589838B (zh) * | 2015-12-24 | 2018-06-12 | 中国电子科技集团公司第三十三研究所 | 一种基于文件比较的电子公文痕迹保留方法 |
CN107239500A (zh) * | 2017-05-03 | 2017-10-10 | 成都国腾实业集团有限公司 | 一种字符串匹配方法及系统 |
CN111090982A (zh) * | 2018-10-24 | 2020-05-01 | 迈普通信技术股份有限公司 | 文本比较方法、装置、电子设备及计算机可读存储介质 |
CN110008383B (zh) * | 2019-04-11 | 2021-07-27 | 北京安护环宇科技有限公司 | 一种基于多索引的黑白名单检索方法及装置 |
CN110008383A (zh) * | 2019-04-11 | 2019-07-12 | 北京安护环宇科技有限公司 | 一种基于多索引的黑白名单检索方法及装置 |
CN110147429A (zh) * | 2019-04-15 | 2019-08-20 | 平安科技(深圳)有限公司 | 文本比较方法、装置、计算机设备和存储介质 |
CN110147429B (zh) * | 2019-04-15 | 2023-08-15 | 平安科技(深圳)有限公司 | 文本比较方法、装置、计算机设备和存储介质 |
CN110362763A (zh) * | 2019-07-16 | 2019-10-22 | 腾讯科技(深圳)有限公司 | 数据排序方法、数据排序装置、介质及电子设备 |
CN111581459A (zh) * | 2020-06-13 | 2020-08-25 | 中国电子信息产业集团有限公司第六研究所 | 一种字符串匹配方法及字符串匹配系统 |
CN111581459B (zh) * | 2020-06-13 | 2021-06-15 | 中国电子信息产业集团有限公司第六研究所 | 一种字符串匹配方法及字符串匹配系统 |
CN112069303A (zh) * | 2020-09-17 | 2020-12-11 | 四川长虹电器股份有限公司 | 字符串的匹配查找方法、装置及终端 |
CN112069303B (zh) * | 2020-09-17 | 2022-08-16 | 四川长虹电器股份有限公司 | 字符串的匹配查找方法、装置及终端 |
CN112434153A (zh) * | 2020-12-16 | 2021-03-02 | 中国计量大学上虞高等研究院有限公司 | 基于ELMo和卷积神经网络的垃圾信息过滤方法 |
CN113609352A (zh) * | 2021-08-03 | 2021-11-05 | 北京恒安嘉新安全技术有限公司 | 字符串检索方法、装置、计算机设备及存储介质 |
CN113609352B (zh) * | 2021-08-03 | 2023-08-04 | 北京恒安嘉新安全技术有限公司 | 字符串检索方法、装置、计算机设备及存储介质 |
CN113836367A (zh) * | 2021-09-26 | 2021-12-24 | 杭州迪普科技股份有限公司 | 一种字符反向匹配的方法及装置 |
CN113836367B (zh) * | 2021-09-26 | 2023-04-28 | 杭州迪普科技股份有限公司 | 一种字符反向匹配的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102063510B (zh) | 2012-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102063510B (zh) | 字符串的匹配查找方法 | |
CN103425739B (zh) | 一种字符串匹配方法 | |
CN102722709B (zh) | 一种垃圾图片识别方法和装置 | |
CN106250372A (zh) | 一种用于电力系统的中文电力数据文本挖掘方法 | |
CN103076892A (zh) | 一种用于提供输入字符串所对应的输入候选项的方法与设备 | |
US9128923B2 (en) | Orthographical variant detection apparatus and orthographical variant detection method | |
CN101398820A (zh) | 一种大规模关键词匹配方法 | |
CN102411617B (zh) | 一种对海量url进行存储和查询方法 | |
CN105589894B (zh) | 文档索引建立方法和装置、文档检索方法和装置 | |
CN101369278B (zh) | 一种近似匹配方法和装置 | |
CN103164388A (zh) | 一种版式文件中结构化信息获取的方法及装置 | |
CN102298681B (zh) | 一种基于数据流切片的软件识别方法 | |
CN103354576B (zh) | 手机及其手机号归属信息的存储及查找方法 | |
CN103678554A (zh) | 字符替换的方法和装置 | |
CN101872363B (zh) | 一种抽取关键词的方法 | |
CN103577598A (zh) | 模式串与文本串的匹配方法和装置 | |
CN104978074A (zh) | 一种公式输入方法和装置 | |
CN103336765B (zh) | 一种文本关键词的马尔可夫矩阵离线修正方法 | |
CN104598473A (zh) | 一种信息处理方法及电子设备 | |
CN101377816B (zh) | 匹配规则包含位移指示符的并行多模式匹配的方法及系统 | |
CN101609466A (zh) | 海量数据查重的方法和系统 | |
CN109828785B (zh) | 一种采用gpu加速的近似代码克隆检测方法 | |
CN102521357A (zh) | 一种利用自动机实现文本精确匹配的系统和方法 | |
CN102346559A (zh) | 一种输入法中词条的删除方法、装置及文字输入工具 | |
CN104361058A (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 | ||
C53 | Correction of patent for invention or patent application | ||
CB02 | Change of applicant information |
Address after: Four, No. 1, building 4, 1, software processing center, No. 519080 Software Garden Road, Guangdong, Zhuhai Applicant after: Zhuhai Allwinner Technology Co., Ltd. Address before: Four, No. 1, building 4, 1, software processing center, No. 519080 Software Garden Road, Guangdong, Zhuhai Applicant before: Zhuhai Allwinner Technology Co., Ltd. |
|
COR | Change of bibliographic data |
Free format text: CORRECT: APPLICANT; FROM: ZHUHAI QUANZHI TECHNOLOGY CO., LTD. TO: ZHUHAI ALLWINNER TECHNOLOGY CO., LTD. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |