一种数据库语句的字符提取方法、装置、设备及介质与流程

文档序号:27392961发布日期:2021-11-15 22:33阅读:83来源:国知局
一种数据库语句的字符提取方法、装置、设备及介质与流程

1.本发明涉及计算机技术领域,特别涉及一种数据库语句的字符提取方法、装置、设备及介质。


背景技术:

2.sql(structured query language,结构化查询语言)语句是一种数据库的查询和程序设计语言。在现有技术中,如果想要对sql语句中的目标字符串进行提取时,通常需要对sql语句进行逐字符匹配。比如:如果解析的sql语句为:select*from staff where id=2时,当检测到字符2时,就会利用相应的参数提取模板将字符2提取出来。但是,当需要提取sql语句中的一些特殊内容字符时,因为特殊内容字符不是现有逐字符匹配规则可识别出的字符串,所以,就会出现无法从sql语句中识别出这些特殊内容字符的问题。比如:如果解析的sql语句为:select*from staff where id=张三,利用现有逐字符匹配规则就无法将“张三”这一特殊内容字符从sql语句中提取出来。目前,针对这一技术问题,还没有较为有效的解决办法。


技术实现要素:

3.有鉴于此,本发明的目的在于提供一种数据库语句的字符提取方法、装置、设备及介质,以从sql语句中提取出特殊内容字符。其具体方案如下:
4.一种数据库语句的字符提取方法,包括:
5.当要提取目标sql语句中的目标字符串时,则根据所述目标字符串设置相应的正则表达式,并利用所述正则表达式对所述目标sql语句进行规则匹配;
6.若所述目标sql语句中存在满足所述正则表达式的筛选字符串时,则分别在所述筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句;其中,所述第一标识符和所述第二标识符为区别于所述目标sql语句中任意一个字符的标识;
7.对所述修改sql语句进行逐字符匹配;
8.当匹配到所述修改sql语句中的所述第一标识符和所述第二标识符时,则对所述第一标识符和所述第二标识符之间的字符串进行提取,得到所述目标字符串。
9.优选的,所述目标字符串包括特殊字符和/或sql字符串和/或文字。
10.优选的,还包括:
11.对所述正则表达式进行存储。
12.优选的,所述第一标识符和所述第二标识符具体为用户自定义的标识符。
13.优选的,所述第一标识符和所述第二标识符具体为成对出现的标识符。
14.优选的,还包括:
15.若所述目标sql语句中不存在满足所述正则表达式的筛选字符串时,则重新执行所述根据所述目标字符串设置相应的正则表达式,并利用所述正则表达式对所述目标sql语句进行规则匹配的步骤,直至所述目标sql语句中存在满足所述正则表达式的所述筛选
字符串。
16.相应的,本发明还公开了一种数据库语句的字符提取装置,包括:
17.规则匹配模块,用于当要提取目标sql语句中的目标字符串时,则根据所述目标字符串设置相应的正则表达式,并利用所述正则表达式对所述目标sql语句进行规则匹配;
18.字符添加模块,用于若所述目标sql语句中存在满足所述正则表达式的筛选字符串时,则分别在所述筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句;其中,所述第一标识符和所述第二标识符为区别于所述目标sql语句中任意一个字符的标识;
19.字符匹配模块,用于对所述修改sql语句进行逐字符匹配;
20.字符提取模块,用于当匹配到所述修改sql语句中存在所述第一标识符和所述第二标识符时,则对所述第一标识符和所述第二标识符之间的字符串进行提取,得到所述目标字符串。
21.相应的,本发明还公开了一种数据库语句的字符提取设备,包括:
22.存储器,用于存储计算机程序;
23.处理器,用于执行所述计算机程序时实现如前述所公开的一种数据库语句的字符提取方法的步骤。
24.相应的,本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述所公开的一种数据库语句的字符提取方法的步骤。
25.可见,在本发明中,当需要提取目标sql语句中的目标字符串时,首先是根据目标字符串设置相应的正则表达式,并利用正则表达式对目标sql语句进行规则匹配;如果目标sql语句中存在满足正则表达式的筛选字符串,则分别在筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句;其中,第一标识符和第二标识符为区别于目标sql语句中任意一个字符的标识;然后,再对修改sql语句进行逐字符匹配,当匹配到修改sql语句中的第一标识符和第二标识符时,则对第一标识符和第二标识符之间的字符串进行提取,就可以提取出目标sql语句中的目标字符串。显然,通过本发明所提供的方法就可以将目标sql语句中的目标字符串转换为逐字符匹配规则可识别的字符串,这样就能够将目标sql语句中无法识别的目标字符串提取出来,并由此达到从sql语句中提取出特殊内容字符的目的。相应的,本发明所提供的一种数据库语句的字符提取装置、设备及介质,同样具有上述有益效果。
附图说明
26.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
27.图1为本发明实施例所提供的一种数据库语句的字符提取方法的流程图;
28.图2为本发明实施例所提供的一种数据库语句的字符提取装置的结构图;
29.图3为本发明实施例所提供的一种数据库语句的字符提取设备的结构图。
具体实施方式
30.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
31.请参见图1,图1为本发明实施例所提供的一种数据库语句的字符提取方法的流程图,该字符提取方法包括:
32.步骤s11:当要提取目标sql语句中的目标字符串时,则根据目标字符串设置相应的正则表达式,并利用正则表达式对目标sql语句进行规则匹配;
33.步骤s12:若目标sql语句中存在满足正则表达式的筛选字符串时,则分别在筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句;
34.其中,第一标识符和第二标识符为区别于目标sql语句中任意一个字符的标识;
35.步骤s13:对修改sql语句进行逐字符匹配;
36.步骤s14:当匹配到修改sql语句中的第一标识符和第二标识符时,则对第一标识符和第二标识符之间的字符串进行提取,得到目标字符串。
37.在本实施例中,是提供了一种sql语句的字符提取方法,通过该方法可以从sql语句中提取出特殊内容字符。具体的,当要提取目标sql语句中的目标字符串时,首先是根据目标字符串设置相应的正则表达式,并利用正则表达式对目标sql语句进行规则匹配。其中,目标字符串为特殊内容字符,比如:2021
‑7‑
2 11:11:11、茉莉花、可乐等等。
38.如果目标sql语句中存在满足正则表达式的筛选字符串,则说明根据目标字符串所设置的正则表达式与目标字符串相适配,在此情况下,则需要分别在目标sql语句中筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句。需要说明的是,在筛选字符串的起始位置和结束位置所添加的第一标识符和第二标识符只要是能够区别于目标sql语句中任意一个字符的标识即可。
39.当在目标sql语句筛选字符的起始位置和结束位置添加完第一标识符和第二标识符,得到修改sql语句之后,就可以对修改sql语句进行逐字符匹配;当按照逐字符匹配的方式,在修改sql语句中匹配到第一标识符和第二标识符之后,就可以从第一标识符和第二标识符之间提取出目标字符串。
40.比如:目标sql语句为select*from staff where time=2020
‑9‑
8 11:4:11时,如果利用现有技术中的逐字符匹配规则对目标sql语句进行匹配,就无法从目标sql语句中提取出字符串“2020
‑9‑
8 11:4:11”。在此情况下,就可以先根据字符串“2020
‑9‑
8 11:4:11”来设置正则表达式。其中,与目标sql语句中的字符串“2020
‑9‑
8 11:4:11”相对应的正则表达式为:(\d{2}|\d{4})(?:\

)?([0]{1}\d{1}|[1]{1}[0

2]{1})(?:\

)?([0

2]{1}\d{1}|[3]{1}[0

1]{1})(?:\s)?([0

1]{1}\d{1}|[2]{1}[0

3]{1})(?::)?([0

5]{1}\d{1})(?::)?([0

5]{1}\d{1})在对目标sql语句进行逐字符匹配之前,需要先检测目标sql语句中是否存在满足上述正则表达式的筛选字符串。如果目标sql语句中存在满足上述正则表达式的筛选字符串“2020
‑9‑
8 11:4:11”,则在筛选字符串“2020
‑9‑
811:4:11”的前后位置分别添加标识符&%#和#%&,此时目标sql语句就会变为修改sql语句select*from staff where time=&%#2020
‑9‑
8 11:4:11#%&。
[0041]
之后,再按照现有的逐字符匹配规则对修改sql语句进行逐字符解析,当解析到标识符&%#和#%&均存在时,则对修改sql语句中标识符&%#和#%&之间的字符串进行提取,就可以将字符串“2020
‑9‑
8 11:4:11”从修改sql语句中提取出来。
[0042]
此外,在实际应用中,利用本实施例所提供的方法还可以对sql语句select*from staff where name=张三进行解析,因为利用现有逐字符匹配的匹配规则无法将该sql语句中的“张三”提取出来。具体的,在对sql语句select*from staff where name=张三进行解析时,需要先设置与“张三”相对应的正则表达式,并利用“张三”相对应的正则表达式对sql语句select*from staff where name=张三进行匹配,如果在该sql语句中匹配出“张三”这一字符串,则在“张三”的前后位置分别添加&%&和&%&,从而将sql语句select*from staff where name=张三替换为select*from staff where name=&%&张三&%&。
[0043]
然后,再利用现有的逐字符匹配规则对sql语句select*from staff where name=&%&张三&%&进行解析,当识别出该sql语句中的字符串&%&和&%&时,就可以对&%&和&%&中间的字符串进行提取,这样就可以将“张三”这一特殊字符串从sql语句select*from staff where name=&%&张三&%&中提取出来。
[0044]
可以理解的是,相较于现有技术而言,通过本实施例所提供的技术方案,就可以将目标sql语句中的目标字符串转换为逐字符匹配规则可识别的字符串,所以,通过该方法就可以从目标sql语句中提取出特殊内容字符。
[0045]
可见,在本实施例中,当需要提取目标sql语句中的目标字符串时,首先是根据目标字符串设置相应的正则表达式,并利用正则表达式对目标sql语句进行规则匹配;如果目标sql语句中存在满足正则表达式的筛选字符串,则分别在筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句;其中,第一标识符和第二标识符为区别于目标sql语句中任意一个字符的标识;然后,再对修改sql语句进行逐字符匹配,当匹配到修改sql语句中的第一标识符和第二标识符时,则对第一标识符和第二标识符之间的字符串进行提取,就可以提取出目标sql语句中的目标字符串。显然,通过本实施例所提供的方法就可以将目标sql语句中的目标字符串转换为逐字符匹配规则可识别的字符串,这样就能够将目标sql语句中无法识别的目标字符串提取出来,并由此达到从sql语句中提取出特殊内容字符的目的。
[0046]
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,目标字符串包括特殊字符和/或sql字符串和/或文字。
[0047]
具体的,在本实施例中,目标sql语句中特殊内容字符的目标字符串既可以是特殊字符,也可以是sql字符串或者是文字等等。比如:目标字符串可以是张三、李四、2020
‑9‑
8、**name等等,只要是利用现有逐字符匹配规则无法从目标sql语句中提取出的字符串即可。
[0048]
可见,通过本实施例所提供的技术方案,就可以进一步拓宽本技术所提供sql语句字符提取方法的应用范围。
[0049]
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,上述字符提取方法还包括:
[0050]
对正则表达式进行存储。
[0051]
在本实施例中,当设置出与目标字符串相对应的正则表达式之后,为了扩大目标
sql语句的模板提取库,还可以对正则表达式进行存储。这样在对目标sql语句中字符串的后续匹配过程中,就可以直接利用正则表达式来判断目标sql语句中是否存在用户所需要提取的字符串。
[0052]
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,第一标识符和第二标识符具体为用户自定义的标识符。
[0053]
在本实施例中,在对目标sql语句筛选字符串的起始位置和结束位置添加第一标识符和第二标识符时,可以按照用户自己的代码编写习惯来设置第一标识符和第二标识符。其中,用户自定义的第一标识符和第二标识符既可以相同,也可以不同,只要是能够使得第一标识符和第二标识符与目标sql语句中的字符区分开,易于对目标sql语句的逐字符匹配即可。
[0054]
显然,通过本实施例所提供的技术方案,就可以相对提高用户在设置第一标识符和第二标识符时的灵活性。
[0055]
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,第一标识符和第二标识符具体为成对出现的标识符。
[0056]
在实际应用中,在对目标sql语句筛选字符串的起始位置和结束位置添加第一标识符和第二标识符时,还可以将第一标识符和第二标识符设置为成对出现的标识符,比如:
“”
、【】、{}、《》等等。
[0057]
能够想到的是,当将第一标识符和第二标识符设置为成对出现的标识符时,在对修改sql语句进行逐字符匹配的过程中,就更为容易对修改sql语句中所出现的成对标识符进行匹配与识别,这样不仅可以提高目标字符串的提取效率,而且,也可以提高目标字符串的提取精度。
[0058]
显然,通过本实施例所提供的技术方案,就可以进一步保证在对目标字符串进行提取时的准确度。
[0059]
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,上述字符提取方法还包括:
[0060]
若目标sql语句中不存在满足正则表达式的筛选字符串时,则重新执行根据目标字符串设置相应的正则表达式,并利用正则表达式对目标sql语句进行规则匹配的步骤,直至目标sql语句中存在满足正则表达式的筛选字符串。
[0061]
在本实施例中,如果目标sql语句中不存在满足正则表达式的筛选字符串,则说明根据目标字符串所设置的正则表达式与目标字符串不相适配。在此情况下,为了保证后续步骤的顺利进行,以及能够从目标sql语句中提出特殊内容字符的目标字符串,就需要重新执行根据目标字符串设置相应正则表达式,并利用正则表达式对目标sql语句进行规则匹配的步骤,直至目标sql语句中出现满足正则表达式的筛选字符串。
[0062]
显然,通过本实施例所提供的技术方案,就可以进一步保证能够从目标sql语句中提取出特殊内容字符的目标字符串。
[0063]
请参见图2,图2为本发明实施例所提供的一种数据库语句的字符提取装置的结构图,该字符提取装置包括:
[0064]
规则匹配模块21,用于当要提取目标sql语句中的目标字符串时,则根据目标字符串设置相应的正则表达式,并利用正则表达式对目标sql语句进行规则匹配;
[0065]
字符添加模块22,用于若目标sql语句中存在满足正则表达式的筛选字符串时,则分别在筛选字符串的起始位置和结束位置添加第一标识符和第二标识符,得到修改sql语句;其中,第一标识符和第二标识符为区别于目标sql语句中任意一个字符的标识;
[0066]
字符匹配模块23,用于对修改sql语句进行逐字符匹配;
[0067]
字符提取模块24,用于当匹配到修改sql语句中存在第一标识符和第二标识符时,则对第一标识符和第二标识符之间的字符串进行提取,得到目标字符串。
[0068]
本发明实施例所提供的一种数据库语句的字符提取装置,具有前述所公开的一种数据库语句的字符提取方法所具有的有益效果。
[0069]
请参见图3,图3为本发明实施例所提供的一种数据库语句的字符提取设备的结构图,该字符提取设备包括:
[0070]
存储器31,用于存储计算机程序;
[0071]
处理器32,用于执行计算机程序时实现如前述所公开的一种sql语句的字符提取方法的步骤。
[0072]
本发明实施例所提供的一种数据库语句的字符提取设备,具有前述所公开的一种数据库语句的字符提取方法所具有的有益效果。
[0073]
相应的,本发明实施例还公开了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如前述所公开的一种数据库语句的字符提取方法的步骤。
[0074]
本发明实施例所提供的一种计算机可读存储介质,具有前述所公开的一种数据库语句的字符提取方法所具有的有益效果。
[0075]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0076]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0077]
以上对本发明所提供的一种数据库语句的字符提取方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1