CN114329105A - 字符串检测方法和装置 - Google Patents
字符串检测方法和装置 Download PDFInfo
- Publication number
- CN114329105A CN114329105A CN202111614380.4A CN202111614380A CN114329105A CN 114329105 A CN114329105 A CN 114329105A CN 202111614380 A CN202111614380 A CN 202111614380A CN 114329105 A CN114329105 A CN 114329105A
- Authority
- CN
- China
- Prior art keywords
- character
- character string
- matching
- string
- target
- 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.)
- Pending
Links
Images
Abstract
字符串检测方法和装置,所述方法包括:依次将第二字符串中的每一个字符确定为目标字符,针对目标字符执行如下处理,直到第二字符串中的每个字符均处理完成。获取与目标字符对应的匹配字符串;匹配字符串由指示匹配结果的二进制字符构成;第1到第N个匹配结果分别为目标字符与第一字符串的第1至第N个字符分别匹配所得到的匹配结果;匹配成功对应1;匹配失败对应0。构造运算字符串。将目标字符对应的匹配字符串,与目标字符对应的运算字符串进行按位与运算,得到与目标字符对应的结果字符串,如果结果字符串的第N位为1,则第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
Description
技术领域
本说明书的实施方式涉及计算机技术领域,更具体地,本说明书的实施方式涉及一种字符串检测方法和装置。
背景技术
本部分旨在为权利要求书中陈述的本说明书的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
字符串检测,通常是在一个较长的字符串中检测一个较短的字符串是否存在,以及具体在什么位置的过程。字符串检测的方法很多,实际应用中,在处理长字符串的检测时,检测效率较低。
发明内容
为克服相关技术中存在的问题,本说明书提供了以下方法及装置。
在本说明书实施方式的第一方面中,提供了一种字符串检测方法,第一字符串包含N个字符,第二字符串包含M个字符(M≥N);所述方法包括:
依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成:
获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
在本说明书实施方式的第二方面中,提供了一种装置,第一字符串包含N个字符,第二字符串包含M个字符(M≥N);所述装置包括:
处理模块,用于依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符通过获取模块、构造模块和运算模块执行处理,直到所述第二字符串中的每个字符均处理完成;
所述获取模块,用于获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
所述构造模块,用于构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
所述运算模块,用于将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
在本说明书实施方式的第三方面中,提供了一种储存介质;其上存储有字符串检测程序,该字符串检测程序执行时实现如下所述方法的步骤:
依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成:
获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
在本说明书实施方式的第四方面中,提供了一种电子设备,包括:包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序;其中,所述处理器通过字符串检测程序以实现如下所述的方法:
依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成:
获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
在本说明书以上的实施方式,至少具有如下的有益效果:
通过将单个字符匹配结果的匹配与不匹配两种结果转化为二进制的1和0,将字符串的匹配过程中频繁的判断字符是否相同的过程转化成简洁高效的位运算,并将每一个字符的匹配结果通过移位后进行位运算的方式进行合并。从而有效降低字符串匹配的开销,加快字符串匹配的速度,提升了字符串匹配算法的效率。
附图说明
通过参考附图阅读下文的详细描述,本说明书示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本说明书的若干实施方式,其中:
图1示意性地示出了字符串检测的BF算法的一种示意图;
图2示意性地示出了字符串检测的KMP算法的一种示意图;
图3示意性地示出了根据本说明书实施方式的一种字符串匹配方法的流程图;
图4示意性地示出了根据本说明书实施方式的一种匹配字符串的建立过程示意图;
图5示意性地示出了根据本说明书实施方式的一种字符串匹配装置的框图;
图6示意性地示出了根据本说明书实施方式的一种字符串匹配装置所在计算机设备的一种硬件结构图;
图7示意性地示出了根据本说明书实施方式的一种应用于字符串匹配的软件产品的示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面参考本说明书的若干代表性实施方式,详细阐释本说明书的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本说明书,而并非以任何方式限制本说明书的范围。相反,提供这些实施方式是为了使本说明书更加透彻和完整,并且能够将本说明书的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本说明书的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本说明书可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
在本文中,需要理解的是,所涉及的术语表示如下:
字符串检测:通常是指在一个较长的待检测字符串中查找是否包含一个较短的模式字符串的过程。
例如,待检测字符串为“onesamplestring”,模式字符串为“es”,则通过在待检测字符串中检测模式字符串,可以查找到两个匹配的结果,待检测字符串的第3-4个字符和9-10个字符构成的两个子串均与模式字符串相同。
位运算:位运算是计算机中二进制数的基本运算,包括按位与(&),按位或(|),按位异或(⊕)等。
按位与运算:按位与运算是一种位运算,通常用符号“&”表示,其功能是参与运算的两个二进制数对应的位进行相与。
例如,1&1=1,1&0=0,0&0=0,1010&1100=1000。
按位或运算:按位与运算是一种位运算,通常用符号“|”表示,其功能是参与运算的两个二进制数对应的位进行相或。
例如,1|1=1,1|0=1,0|0=0,1010|1100=1110。
FPGA(现场可编程逻辑门阵列):FPGA是一种特殊应用集成电路中的半定制电路,具有强大的位运算能力和并发运算能力。
此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
应用场景总览
在计算机程序中,经常涉及字符串的检测场景,在相关技术中,通常采用BP算法或KMP算法实现字符串的检测。
BF(Brute-Force)算法,即暴力算法,通过穷举待检测字符串中与模式串长度相同的子串,并与模式串进行一一比对的方式来进行字符串的检测。
请参见图1,图1是字符串检测的BF算法的一种示意图。
例如,待检测字符模式串1a为ABCABCE,模式串1b为ABCE,模式串的长度为4。从待检测字符串的首字符A开始,取长度为4的子字符串101为ABCA,与模式串逐位分别进行比较,当比较到第4位时发现匹配失败;继续从待检测字符串的第二个字符B开始,取长度为4的子字符串102为BCAB,与模式串逐位分别进行比较;以此类推,直到穷举和比较完待检测字符串的每个长度为4的子字符串。
可以看到,使用BF算法进行字符串检测时,待检测字符串中的每个字符都要进行多次的重复比较过程,开销很大,检测效率很低。
KMP算法是BF算法的一种改进,请参见图2,图2是字符串检测的KMP算法的一种示意图。
类似BF算法,KMP算法也从待检测字符串的第一个与模式串长度相同的子串开始匹配,但不需要对所有子串执行匹配过程,跳过了一些不可能匹配成功的子串。具体跳转逻辑如下,当匹配一个子串时,如果某一位匹配失败,寻找匹配成功的部分中与前缀相同的最长的后缀,如果该后缀存在,下一个进行匹配的子串从该后缀的首字符开始取子串;否则直接从匹配失败的位置开始取下一个子串。
例如,待检测字符串2a为ABCABCBEABAE……,模式串2b为ABCABD,模式串的长度为6;取待检测字符串的第一个子串201为ABCABC,与模式串进行逐位比较,前5位ABCAB匹配成功,且匹配成功的部分最长的相同的前缀与后缀为AB,则下一个子串从后缀AB的首字母A处开始取,得到下一个子串202为ABCBEA;对于子串ABCBEA,前3位ABC匹配成功,不存在相同的前缀和后缀,因此下一个子串从匹配失败的B开始取,得到下一个子串203为BEABAE;以此类推,直到匹配完成。
KMP算法相对于BF算法,进行字符匹配的次数明显减少,但是每个子串与模式串进行逐位比较时又引入了子串位置跳转长度,跳转会随着输入字符串的不同而变化,尤其是输入的待检测字符串和模式串较长时,跳转也变得复杂。
可见,对字符串检测来说,进行字符比对的次数越多,判断分支越复杂,则检测的开销越大,效率越低。
方案概述
如前所述,采用将传统的BF算法或KMP算法进行字符串检测,仍存在计算开销大,检测效率低的问题。
有鉴于此,本说明书提供一种将字符匹配结果用二进制字符表示,基于位运算字符串检测方法。
在实现时,可以:使用二进制字符0和1表示单个字符的匹配结果,并利用输入字符串中字符与模式串的每个字符的匹配结果表示的二进制字符串之间的位运算,得到字符串匹配的结果。从而,大大减少了字符串匹配时进行的字符匹配的次数,避免了重复进行的多次字符匹配。因此,可以减字符串匹配过程的开销,加快了字符串匹配的速度。
示例性方法
下面将通过具体的实施例对本说明书的技术构思进行详细描述。
请参见图3,图3是一示例性实施例提供的一种字符串匹配方法的流程图。
第一字符串包含N个字符,第二字符串包含M个字符(M≥N),在第二字符串中检测第一字符串,所述方法执行以下步骤:
步骤300,依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成;
从第二字符串中检测第一字符串,从第二字符串的首字符开始,依次作为目标字符,对每一个目标字符分别进行处理。
例如,第二字符串可以为ABEABCA,此时,首个目标字符可以为第二字符串的首字符A,第二个目标字符串可以为第二字符串的第二个字符B,以此类推。
其中,第二字符串可以预先储存在计算设备中,也可以是在需要检测时一次输入的,也可以是在进行检测时逐位输入的,本说明书不对此进行具体限定。
步骤302,获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
字符串的匹配可以拆分成字符串中对应位置字符的匹配。而需要进行检测的第二字符串与第一字符串中包含的字符的种类是有限的,因此可以预先建立代表第二字符串中每种字符对应的,与第一字符串中每个字符的匹配结果的数据。其中,第二字符串中的每种字符,与第一字符串中的每个字符的匹配结果只有两种,匹配成功或匹配失败。因此,可以使用二进制符号1来表示匹配成功,使用二进制符号0来表示匹配失败。那么,对于长度为N的第一字符串,第二字符串中的每种字符对应的,与第一字符串中每个字符的匹配结果,就可以表示成一个长度为N的二进制字符串,可以称该字符串为第二字符串中的该种字符对应的匹配字符串。
如图4所示,图4是一示例性实施例提供的一种匹配字符串的建立过程示意图。
例如,第一字符串40可以为ABCA,第二字符串可以为ABEABCA,字符匹配方向为从左向右。那么,第二字符串中包含的不同种类的字符有A,B,C,E共计4种。可以从字符A开始,获取字符A与第一字符串ABCE中每个字符的匹配结果,并用1表示匹配成功,用0表示匹配失败。
对于字符A,第一字符串中各个字符中第1,4个字符匹配成功,第2,3个字符匹配失败,因此,可以用匹配字符串401:1001,来表示字符A与第一字符串中各个字符的匹配结果;
同理,可以使用相同的匹配方法得到字符B对应的匹配字符串402为0100,字符C对应的匹配字符串403为0100,字符E对应的匹配字符串404为0000。
可以理解的是,也可以使用第一字符串中的每种字符,对第一字符串中的每个字符建立匹配字符串,对于第二字符串中存在但第一字符串中不存在的字符,使用长度和第一字符串相同的全0字符串作为匹配字符串。
对于每个目标字符,获取对应的匹配字符串,在匹配字符串已经建立完成的情况下,只要查询目标字符对应的匹配字符串即可;当然,也可以根据以上匹配字符串的建立规则,在获取到目标字符后,建立对应的匹配字符串。
例如,对于第一个目标字符A,可以查询得字符A对应的匹配字符串401为1001。
可以理解的是,匹配字符串也可以是预先获取的,也可以是在本说明书的方案中建立的,本说明书不对此做出具体限定。
步骤304,构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
构造一个初始结果字符串,该初始结果字符串为一个长度与第一字符串长度相同N的全0二进制字符串。如果上述目标字符为第二字符串中的首字符,可以将初始结果字符串按照字符匹配方向向下移动一位并补1得到对应的运算字符串。此时,目标字符串对应的运算字符串为首位为1,其余各位均为0的N位二进制字符串。
例如,当第一字符串的长度N为4时,初始结果字符串可以为0000,字符匹配方向为从左向右,作为第二字符串首字符的目标字符对应的运算字符串为1000。
如果上述目标字符不是第二字符串的首字符,运算字符串可以由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到。
例如,上一个目标字符对应的结果字符串为1010,字符匹配方向为从左到右,则目标字符对应的运算字符串1010右移一位补1的结果1101;又例如,上一个目标字符对应的结果字符串为0100,字符匹配方向为从右向左,则目标字符对应的运算字符串为0100左移一位补1的结果1001。
步骤306,将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位或运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
将目标字符对应的匹配字符串和运算字符串,进行按位与运算,可以得到目标字符串对应的结果字符串。
例如,目标字符对应的匹配字符串为1001,运算字符串为1000,则该目标值字符对应的结果字符串即为匹配字符串1001与运算字符串1000进行按位与运算得到的结果1000。
判断上述结果字符串的末位,即第N位,是否为1。如果上述结果字符串的末位为1,则说明字符串检测成功,目标字符在第二字符串中的位置即为第一字符串在第二字符串中末位的位置。
例如,第一字符串的长度为4,目标字符为第二字符串中的第8个字符,且目标字符对应的结果字符串为1011,末尾为1;那么,第二字符串中以第8个字符结尾的4个连续字符构成的字符串,即第二字符串中的第5-8个字符构成的字符串,即为需要检测的第一字符串。
在一个示意性的实施例中,第一字符串和第二字符串中的字符可以包括特定的字符组合,将一个特定的字符组合看做一个特定的字符进行处理。
在一个示意性的实施例中,所述方法应用于计算设备,所述计算设备包括FPGA。
本说明书的方案可以应用于计算设备,例如CPU,GPU,嵌入式芯片等。其中,FPGA在进行位运算的能力较强,因此,可以采用使用FPGA时,实施本说明书的字符串检测方法可以有效提升检测效率。
在一个示意性的实施例中,所述第一字符串存储在计算设备的内部储存中。
当第一字符串有多个时,可以将第一字符串及其对应的标识信息进行储存。根据实际应用场景,可以存储在计算设备的内部储存中,在进行字符串检测时可以直接从内部调用。
在一个示意性的实施例中,所述第一字符串存储在计算设备的外部储存中;所述方法还包括:进行字符串检测时将第一字符串加载到计算设备的内部缓存。
可以理解的是,根据实际应用场景,第一字符串及其对应的标识信息也可以存储在计算设备的外部储存中。在进行字符串检测时,第一字符串可以直接从外部储存进行调用,也可以提前将第一字符串加载到内部储存中,以加快字符串检测的速度。
在一个示例性的实施例中,所述第一字符串包括待检测字符串拆分成的若干个子字符串;所述方法还包括:将各个子字符串的检测结果进行合并,得到所述带检测字符串对应的检测结果。
对于比较长的模式字符串,每一个目标字符对应的匹配字符串,运算字符串,结果字符串都会比较长,占用较多的储存空间,并且检测也会比较慢。
基于此,可以将较长的模式字符串进行拆分,拆分后的得到子串分别第一字符串进行上述字符串检测,并将得到的各个子字符串的结果进行合并,得到上述模式串对应的检测结果。
例如,模式串为ABCD,可以拆分为两个子字符串AB和CD,分别作为第一字符串进行上述字符串检测。
检测结果为:子字符串AB在第二字符串中的位置分别为第2-3位,第5-6位;子字符串CD在第二字符串中的位置分别为第4-5位,第9-10位。
由于第2-3位的AB和第4-5位的CD可以连接成ABCD,因此合并后的结果为:模式串在第二字符串中的位置为第2-5位。
上述实施例中,对各个子串的检测过程可以并行进行,能有效提升字符串检测的速度和效率。尤其是在并行运算能力比较强的计算设备,例如FPGA中。
可以理解的是,本说明书记载的上述所有实施例中,也可以用二进制字符1表示匹配失败,二进制字符0表示匹配成功,即可得到如下方案:
一种字符串检测方法,第一字符串包含N个字符,第二字符串包含M个字符(M≥N);所述方法包括:
依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成:
获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为0;所述匹配字符串中与匹配失败对应的二进制字符的取值为1;
构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补0得到的字符串,所述初始结果字符串为由N个1构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补0得到的字符串;
将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位或运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为0,如果所述结果字符串的第N位为0,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
本方案的具体实施过程与使用二进制字符1表示匹配成功,用二进制字符0表示匹配失败的上述方案类似,不再赘述。
在本说明书的示例性实施例中,还提供了一种字符串检测装置。请参见图5,图5是在本说明书实施方式的一种字符串检测装置的框图。第一字符串包含N个字符,第二字符串包含M个字符(M≥N);包括:
处理模块500,用于依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符通过获取模块510、构造模块520和运算模块530执行处理,直到所述第二字符串中的每个字符均处理完成;
获取模块510,用于获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
构造模块520,用于构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
运算模块530,用于将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。在本说明书的示例性实施例中,还提供了一种字符串检测装置。
在本说明书的示例性实施例中,还提供了一种装置及其所应用的终端的实施例。
本说明书字符串检测装置的实施例可以应用在计算机设备上,例如服务器或终端设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图6所示,为本说明书实施例字符串检测装置所在计算机设备的一种硬件结构图,除了图6所示的处理器610、内存630、网络接口620、以及非易失性存储器640之外,实施例中装置631所在的服务器或电子设备,通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。
在本说明书的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施例中,本说明书的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端设备上运行时,所述程序代码用于使所述终端设备执行本说明书上述“示例性方法”部分中描述的根据本说明书各种示例性实施例的步骤。
参考图7所示,描述了根据本说明书的实施例的用于实现上述方法的程序产品70,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本说明书的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本说明书操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本说明书的其他实施例。本说明书旨在涵盖本说明书的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书的一般性原理并包括本说明书未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书的真正范围和精神由权利要求指出。
应当注意,尽管在上文详细描述中提及了装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本说明书的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本说明书方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本说明书的精神和原理,但是应该理解,本说明书并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本说明书旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种字符串检测方法,其特征在于,第一字符串包含N个字符,第二字符串包含M个字符(M≥N);所述方法包括:
依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成:
获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
2.根据权利要求1所述的方法,其特征在于,所述第一字符串和第二字符串中的字符包括:字符,或特定的字符组合。
3.根据权利要求1所述的方法,其特征在于,所述方法应用于计算设备,所述计算设备包括FPGA。
4.根据权利要求3所述的方法,其特征在于:
所述第一字符串存储在计算设备的内部储存中。
5.根据权利要求3所述的方法,其特征在于:
所述第一字符串存储在计算设备的外部储存中;
所述方法还包括:进行字符串检测时将第一字符串加载到计算设备的内部缓存。
6.根据权利要求1所述的方法,其特征在于,
所述第一字符串包括模式字符串拆分成的若干个子字符串;
所述方法还包括:将各个子字符串的检测结果进行合并,得到所述模式字符串对应的检测结果。
7.一种字符串检测方法,其特征在于,第一字符串包含N个字符,第二字符串包含M个字符(M≥N);所述方法包括:
依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符执行如下处理,直到所述第二字符串中的每个字符均处理完成:
获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为0;所述匹配字符串中与匹配失败对应的二进制字符的取值为1;
构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补0得到的字符串,所述初始结果字符串为由N个1构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补0得到的字符串;
将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位或运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为0,如果所述结果字符串的第N位为0,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
8.一种字符串检测装置,其特征在于,第一字符串包含N个字符,第二字符串包含M个字符(M≥N);所述装置包括:
处理模块,用于依次将所述第二字符串中的每一个字符确定为目标字符,针对所述目标字符通过获取模块、构造模块和运算模块执行处理,直到所述第二字符串中的每个字符均处理完成;
所述获取模块,用于获取与所述目标字符对应的匹配字符串;其中,所述匹配字符串由N个指示匹配结果的二进制字符构成;其中第1到第N个匹配结果分别为所述目标字符与所述第一字符串的第1至第N个字符分别匹配所得到的匹配结果;其中,所述匹配结果包含匹配失败和匹配成功;所述匹配字符串中与匹配成功对应的二进制字符的取值为1;所述匹配字符串中与匹配失败对应的二进制字符的取值为0;
所述构造模块,用于构造与所述目标字符对应的运算字符串;其中,如果所述目标字符为所述第二字符串的首字符时,所述运算字符串为由初始结果字符串按照字符匹配方向向下移动一位并补1得到的字符串,所述初始结果字符串为由N个0构成的二进制字符串;如果所述目标字符不是所述第二字符串的首字符,所述运算字符串为由上一个目标字符对应的结果字符串按照字符匹配方向向下移动一位并补1得到的字符串;
所述运算模块,用于将所述目标字符对应的匹配字符串,与所述目标字符对应的运算字符串进行按位与运算,得到与所述目标字符对应的结果字符串,并确定所述结果字符串的第N位是否为1,如果所述结果字符串的第N位为1,则所述第二字符串中的以目标字符为第N个字符的N个连续字符构成的字符串确定为第一字符串。
9.一种存储介质,其特征在于,其上存储有字符串检测程序,该字符串检测程序执行时实现如权利要求1-7中任一项所述的方法。
10.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述程序时实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111614380.4A CN114329105A (zh) | 2021-12-27 | 2021-12-27 | 字符串检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111614380.4A CN114329105A (zh) | 2021-12-27 | 2021-12-27 | 字符串检测方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114329105A true CN114329105A (zh) | 2022-04-12 |
Family
ID=81013137
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111614380.4A Pending CN114329105A (zh) | 2021-12-27 | 2021-12-27 | 字符串检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114329105A (zh) |
-
2021
- 2021-12-27 CN CN202111614380.4A patent/CN114329105A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9647684B2 (en) | Memory-based history search | |
US10594704B2 (en) | Pre-processing before precise pattern matching | |
US10747819B2 (en) | Rapid partial substring matching | |
US10546002B2 (en) | Multiple sub-string searching | |
US10169451B1 (en) | Rapid character substring searching | |
EP3051700A1 (en) | Hardware efficient fingerprinting | |
US8868584B2 (en) | Compression pattern matching | |
US9696976B2 (en) | Method for optimizing processing of character string during execution of a program, computer system and computer program for the same | |
EP2056221A1 (en) | Split state machines for matching | |
CN114329105A (zh) | 字符串检测方法和装置 | |
JP2014232523A (ja) | サブワード有限状態機械を利用する探索装置 | |
US9197243B2 (en) | Compression ratio for a compression engine | |
CN113836367B (zh) | 一种字符反向匹配的方法及装置 | |
US10915547B2 (en) | Optimizing data conversion using pattern frequency | |
US20170288700A1 (en) | Bch decorder in which folded multiplier is equipped | |
US9471276B2 (en) | Pipelined modular reduction and division | |
US8805904B2 (en) | Method and apparatus for calculating the number of leading zero bits of a binary operation | |
US10579375B2 (en) | Method to build reconfigurable variable length comparators | |
HU216990B (hu) | Eljárás és számítógépes rendszer utasítások feldolgozására | |
JP2007274051A (ja) | バイト列探索器及び探索方法 | |
TW201734855A (zh) | 基於截斷的確定性有限自動機(dfa)與硬體過濾器匹配的區域/能源複雜的正規表示法樣式 | |
US20190243649A1 (en) | Method to reduce effort in variable width comparators | |
KR20230142910A (ko) | 연판정 복호 방법 및 장치 | |
JPH0722969A (ja) | 演算装置 | |
CN117008959A (zh) | 面向Flink的数据处理方法、装置、设备及存储介质 |
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 |