一种正则表达式的生成方法及系统的制作方法

文档序号:10512150阅读:211来源:国知局
一种正则表达式的生成方法及系统的制作方法
【专利摘要】本申请实施例公开了一种正则表达式的生成方法及系统。该方法包括:获得预设字符串;响应于触发指令获得预设字符串中的待收集字符串;从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串;从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串;根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。利用本申请实施例可以生成用户需要字符串的正则表达式。
【专利说明】
_种正则表达式的生成方法及系统
技术领域
[0001]本申请涉及计算机技术领域,特别涉及一种正则表达式的生成方法及系统。
【背景技术】
[0002]正则表达式是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
[0003]一般可以通过正则表达式生成工具来生成正则表达式。现有的正则表达式生成工具包括Txt2re。Txt2re可以提供多个文本项选定按钮。通过某个文本项选定按钮,Txt2re工具可以执行对应规则的处理。这种处理通常包括提取一段字符串中具有相应规则的部分字符串,并由提取的部分字符串生成对应正则表达式的代码。以利用Txt2re生成一段日志的正则表达式为例,具体步骤包括:
[0004]SI:Txt2re工具通过文本框接收输入的日志。假设该段日志为:
[0005]10.200.98.220—[28/Jun/2013:14:53:08+0800] "POST
[0006]/PutData ? Category = YunOsAccountOpLog&AccessKeyld =U0UjpekFQ0VJW45A&Date = Fri
[0007]% 2C % 2028 % 20Jun % 202013 % 2006 % 3A53 % 3A30 % 20GMT&Topic =raw&Signature = pD12
[0008]XYLmGxKQ% 2Bmkd6x7hAgQ7blc% 3D HTTP/1.1〃0.0241820420037"-"
[0009]〃aliyun_sdk-java"
[0010]S2:Txt2re工具遍历输入的日志中的每个字符,识别日志中具有一定规则的字符串,并按照预设规则生成对应日志中每个字符串的正则表达式标记。
[0011]例如,Txt2re工具遍历输入的日志中的每个字符,在遍历完“ 10.200.98.220”这些字符时,根据预设规则判断这一串字符为一 IPv4的地址,并生成代表该字段的正则表达式标记 “ipaddress”。
[0012]S3:Txt2re工具接收单击界面中"show matches"按钮的指令,响应该指令并显示日志中的字符串及对应的正则表达式标记,并且在所述正则表达式标记上提供点击命令。如图1所示,通过接收点击的"show matches"按钮,Txt2re工具可以显示一个区域。在该区域中分两行分别显示日志内容和与日志内容中所识别字符串对应的正则表达式标记。并且,在所述正则表达式标记上提供可点击的按钮。
[0013]S4:Txt2re工具接收单击上述标记为“ipaddress”的按钮,对对应的字符串“10.200.98.220”进行处理并生成对应该字符串正则表达式的代码。
[0014]后续,操作人员可以手工或者利用其它工具将所述代码转化为对应字段的正则表达式。
[0015]由此可见,Txt2re工具可以按预设规则提供多个待收集字符串选定按钮。通过单击某个待收集字符串的选定按钮,Txt2re工具就可以生成该待收集字符串对应的正则表达式。
[0016]在实现本申请过程中,发明人发现现有技术中至少存在如下问题:
[0017]现有技术利用Txt2re工具生成正则表达式时,可以获取的正则表达式是有限的,也即只能提供符合一定规则字符串的正则表达式,不能按照用户的需要生成正则表达式。比如上述日志中,Txt2re工具可以提供包括“ [28/Jun/2013:14:53:08+0800] ”这个字符串对应的选定按钮。但这个字符串中的中括号并没有太大意义,所以用户可以选择的话,一般会选择字符串“28/Jun/2013:14:53:08+0800”,也即用户需要去掉括号后的这个字符串的正则表达式。但现有技术并没有给用户选择的机会。因此,利用现有技术生成正则表达式,灵活性差,无法满足用户需要。

【发明内容】

[0018]本申请实施例的目的是提供一种正则表达式的生成方法及系统,可以生成用户需要字符串的正则表达式。
[0019]为解决上述技术问题,本申请实施例提供一种正则表达式的生成方法及系统是这样实现的:
[0020]一种正则表达式的生成方法,包括:
[0021]获得预设字符串;
[0022]响应于触发指令获得预设字符串中的待收集字符串;
[0023]从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串;
[0024]从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串;
[0025]根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。
[0026]—种正则表达式的生成系统,包括:
[0027]预设字符串获得单元,用于获得预设字符串;
[0028]待收集字符串获得单元,用于响应于触发指令获得预设字符串中的待收集字符串;
[0029]第一字符串获得单元,用于从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串;
[0030]第二字符串获得单元,用于从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串;
[0031]正则表达式生成单元,用于根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。
[0032]由以上本申请实施例提供的技术方案可见,本申请实施例通过响应于触发指令,根据用户的需要获取预设字符串中待收集的字符串,并根据预设规则生成所述待收集字符串的正则表达式。与现有技术相比,大大提高了用户使用的灵活性,可以根据用户需要生成相应字符串的正则表达式,进而可以根据该正则表达式解析出对用户有用的字符串。
【附图说明】
[0033]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0034]图1是现有技术中Txt2re工具匹配日志的部分示意图;
[0035]图2是本申请一种正则表达式的生成方法一个实施例的流程图;
[0036]图3是本申请一种正则表达式的生成系统一个实施例的流程图。
【具体实施方式】
[0037]本申请实施例提供一种正则表达式的生成方法及系统。
[0038]为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0039]以下以几个具体的例子详细说明本申请实施例的具体实现。
[0040]以下首先介绍本申请一种正则表达式的生成方法的实施例。结合附图2,该实施例包括:
[0041]SlOO:获得预设字符串。
[0042]本申请实施例中,获取预设字符串可以通过响应用户导入的操作,这里的预设字符串可以是一段日志,比如:
[0043]“ [2015-01-0718:50:36.432] [INFO]access-127.0.0.1—"GET/user/projects/al1-sls-test HT TP/1.l"304_"http://localhost:8888/""Mozilla/5.0(Macintosh ;Intel Mac OS X 10_10_1)Appleff ebKit/537.36(KHTML, like Gecko)Chrome/39.0.2171.95Safari/537.36"”
[0044]这是一条访问日志,记录的内容包括用户访问服务时的信息,比如用户的IP,用户请求的统一资源定位符(Uniform Resource Locator,URL),用户使用的浏览器等等。
[0045]此外,本申请实施例所述的获取预设字符串的实现方式可以是通过响应用户导入的操作,在实际中还可以是其他形式,本申请实施例并不以此为限。
[0046]进一步的,本申请实施例所述的预设字符串可以是一段日志,在实际中还可以是其他形式,例如一段符合一定句法规则的字符串,本申请实施例并不以此为限。
[0047]S200:响应于触发指令获得预设字符串中的待收集字符串。
[0048]本申请实施例中,所述触发指令具体可以包括用户根据具体的需要选择并拖拽预设字符串中的部分字符串的操作;还可以包括用户点击预设字符串中的部分字符串的起始位置触发的第一指令,以及点击所述部分字符串的结束位置触发的第二指令,所述第二指令还可以包括用户按住预设快捷键并点击所述部分字符串的结束位置的操作。
[0049]以下述一段日志片段为例,假设获取的预设字符串为:
[0050]“[2014-11-0219:46:03.895] [INFO] access-127.0.0.!--"GET/HTTP/1.1〃304-〃0K〃”
[0051]假设用户想要收集的字符串,也即待收集的字符串为:“2014-11-0219:46:03.895”,那么用户选择并拖拽待该字符串的操作可以触发指令,根据触发指令从所述预设字符串中识别出所述待收集的字符串为:“2014-11-0219:46:03.895”。
[0052]进一步的,用户可以任意选中想要收集的字符串,但一般用户选中的字符串是具有一定意义的字符串。比如用户选中的字符串可以为“INF0”,也可以是“IN”,但前者是具有一定意义的,代表了日志级别,而后者则没有意义,即使选中后生成相应的正则表达式也没有意义。
[0053]此外,本申请实施例所述触发指令的实现方式可以包括选择并拖拽预设字符串中的部分字符串的操作或者点击预设字符串中的部分字符串的起始位置第一指令,以及点击预设字符串中的部分字符串的结束位置的第二指令,在实际中还可以是其他形式,例如选择并右击预设字符串中的部分字符串所在区域的操作等,本申请实施例并不以此为限。
[0054]S300:从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串。
[0055]以步骤S200 中所述的预设字符串:“ [2014-11-0219:46:03.895] [INFO]access-127.0.0.1—"GET/HTTP/1.Γ304_"0Κ",,为例。
[0056]当待收集字符串为:“2014-11-0219:46:03.895”时,从所述预设字符串中识别在所述待收集字符串前面的字符串为,也即所述第一字符串为:“[”。
[0057]S400:从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串。
[0058]以步骤S300中所述的例子,那么预设字符串中在所述待收集字符串后面的字符串,也即所述第二字符串为[INFO]access-127.0.0.1—"GET/HTTP/1.1〃304_〃0Κ〃”。
[0059]S500:根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。
[0060]所述第一预设规则具体包括:
[0061]这里要生成待收集正则表达式,首先需要判断所述第一字符串和所述待收集的字符串中的字符特征,并根据所述第一字符串和所述待收集字符串中的字符特征生成第一部分正则表达式。具体是通过执行下述步骤S510至S530的操作至确定第一部分正则表达式:
[0062]S510:当所述第一字符串符合第二预设规则时,返回对应结果并作为所述第一部分正则表达式。
[0063]这里的第二预设规则具体包括:
[0064]当所述第一字符串不为空,且所述第一字符串是纯数字字符组成,且所述待收集的字符串为空或所述待收集的字符串的第一个字符不是纯数字字符时;返回第一预设标识。
[0065]所述第一预设标识为〃\\d+〃,表示所述第一字符串是由数字组成。
[0066]当所述第一字符串不为空,且所述第一字符串是包含字母的纯单词字符组成,且所述待收集的字符串为空或所述待收集的字符串的第一个字符不是纯单词字符时;返回第二预设标识。
[0067]所述第二预设标识为“\\w+”,表示所述第一字符串是由单词字符组成。
[0068]进一步的,所述纯单词字符包括:a-z、A-Z、0-9。
[0069]当所述第一字符串不为空,且所述第一字符串是非空字符组成,且所述待收集的字符串为空字符串或所述待收集的字符串的第一个字符是空字符时;返回第三预设标识。
[0070]所述第三预设标识为“\\S+”,表示所述第一字符串是由非空字符组成。
[0071]进一步的,这里的空字符包括:空格、“\t”、“\n”、“\r”、“\V”、“\f”。其中,“\t”是转义字符,代表水平制表(Tab) ;“\n”是转义字符,代表换行;“\r”是转义字符,代表回车;“V”是转义字符,代表垂直制表;“\f”是转义字符,代表换页。因此,只要不是空格、“\t”、“ \n”、“ \r ”、“ \v”、“ \f ”的字符都是非空字符。
[0072]当所述第一字符串为空时;返回第四预设标识。
[0073]所述第四预设标识为“ ”,表示所述第一字符串为空。
[0074]进一步的,当第一字符串不符合第二预设规则时,可以判断所述待收集的字符串的字符特征。
[0075]S520:当所述待收集的字符串符合第三预设规则时,返回对应结果并作为所述第一部分正则表达式。
[0076]这里的第三预设规则包括:
[0077]当所述待收集的字符串不为空,且所述待收集的字符串的第一个字符是分隔符号,且所述第一字符串不包含所述待收集的字符串的第一个字符时,返回第五预设标识。
[0078]所述分隔符号包括“ ”(空格),“[”(中括号),“]”(中括号),(双引号), (连字符),“\t” (Tab),“: ”(冒号),“,”(逗号),“;”(分号)。
[0079]进一步的,所述第五预设标识包括“Γ” +所述待收集的字符串的第一个字符+ “]+”,代表所述待收集的字符串不为空,且所述待收集的字符串的第一个字符为分隔字符,且所述第一字符串不包含所述待收集的字符串的第一个字符。
[0080]当所述待收集的字符串为空时,返回第六预设标识。
[0081]所述第六预设标识为*”,表示所述待收集的字符串为空。
[0082]进一步的,当所述待收集的字符串不符合第三预设规则时,可以进一步判断所述第一字符串的字符特征。
[0083]S530:当所述第一字符串符合第四预设规则时,返回对应结果并作为所述第一部分正则表达式。
[0084]这里的第四预设规则包括:
[0085]定义第一预设变量,依次遍历所述第一字符串中的字符,判断所述第一字符串中的字符是否为分隔字符。
[0086]当所述判断为是时,将所述字符追加到第一预设变量。
[0087]例如:定义的第一预设变量为resl =“ ”,假设所述第一字符串为也即在遍历所述第一字符串时,所述第一字符串中的字符为分隔字符,故将所述字符追加到第一预设变量后,resl = “-”。
[0088]其中,空格,“\t”(Tab)需要转义变成中括号)需要转义变成
(双引号)需要转义变成“\\\〃”;其他的分隔字符可以直接追加到第一预设变量。
[0089]例如:定义的第一预设变量为resl = “”,假设所述第一字符串为,也即在遍历所述第一字符串时,所述第一字符串中的字符为分隔字符,故将所述字符追加到第一预设变量后,resl = “_\\s\\[”。
[0090]当所述判断为否时,停止遍历。
[0091]判断是否遍历全部所述第一字符串中的字符。
[0092]当遍历全部所述第一字符串中的字符时,返回第一预设变量。
[0093]当前第一预设变量作为所述第一部分正则表达式。
[0094]当没有遍历全部所述第一字符串中的字符,且当所述没有遍历的字符串中不包含分隔字符时;获取所述第一字符串中没有遍历的字符串,调用步骤S510。将所述第一字符串中没有遍历的字符串作为所述第一字符串。
[0095]进一步的,当当前第一字符串符合第二预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。
[0096]进一步的,当当前第一字符串符合第四预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。
[0097]进一步的,当没有遍历全部所述第一字符串中的字符,且当所述没有遍历的字符串中包含分隔字符时,获取所述第一字符串中没有遍历的字符串。
[0098]根据所述没有遍历的字符串中的第一个分隔字符将所述没有遍历的字符串分隔为第一个分隔字符前面的字符串、第一个分隔字符和第一个分隔字符后面的字符串。
[0099]进一步的,将所述第一个分隔字符前面的字符串作为第一字符串,调用步骤S510。当当前第一字符串符合第二预设规则时,将返回的结果追加到第一预设变量。
[0100]进一步的,当当前第一字符串不符合第二预设规则时,将所述第一个分隔字符作为待收集的字符串,调用步骤S520。当当前待收集的字符串符合第三预设规则时,将返回的结果追加到第一预设变量。
[0101]当当前待收集的字符串不符合第三预设规则时,判断当前第一字符串是否符合第四预设规则。当所述判断为是时,将返回的结果追加到第一预设变量。
[0102]进一步的,将所述第一分隔字符作为第一字符串,调用步骤S510。当当前第一字符串符合第二预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。
[0103]进一步的,将所述第一个分隔字符后面的字符串作为待收集的字符串,调用步骤S520。当当前待收集的字符串符合第三预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。
[0104]进一步的,将所述第一分隔字符作为第一字符串,当当前第一字符串符合第四预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。
[0105]进一步的,所述第一预设规则还包括:
[0106]需要判断所述待收集的字符串和所述第二字符串中的字符特征,并根据所述待收集字符串和所述第二字符串中的字符特征生成第二部分正则表达式。将所述待收集的字符串作为上述确定第一部分正则表达式操作中的第一字符串,将所述第二字符串作为上述确定第一部分正则表达式操作中的待收集的字符串,并执行上述操作,将返回的结果作为第二部分正则表达式。具体包括:
[0107]S540:将所述待收集的字符串作为第一字符串,调用步骤S510。当当前第一字符串符合第二预设规则时,返回结果作为所述第二部分正则表达式。
[0108]进一步的,所述第一预设规则还可以包括:
[0109]S550:将所述第二字符串作为待收集的字符串,调用步骤S520。当当前待收集的字符串符合第三预设规则时,返回结果作为所述第二部分正则表达式。
[0110]进一步的,所述第一预设规则还可以包括:
[0111]S560:将所述待收集的字符串作为第一字符串,调用步骤S530。当当前第一字符串符合第四预设规则时,返回结果作为所述第二部分正则表达式。
[0112]进一步的,所述第一预设规则还可以包括:
[0113]S570:根据所述第一部分正则表达式和所述第二部分正则表达式生成所述待收集的正则表达式。
[0114]这里根据所述第一部分正则表达式和所述第二部分正则表达式生成所述待收集的正则表达式,需要先判断所述第二部分正则表达式是否以第五预设标识(结尾;
[0115]当所述判断为是时,将所述第一部分正则表达式和所述第二部分正则表达式以一定规则拼接生成所述带收集的字符串的正则表达式。
[0116]假设所述第一部分正则表达式为:regl,所述第二部分正则表达式为:reg2,那么所述待收集的字符串的正则表达式为:regl+ “(”+reg2+ “)”。
[0117]当所述判断为否时,将所述第一部分正则表达式、所述第二部分正则表达式和所述第五预设标识以一定规则拼接生成所述带收集的字符串的正则表达式。
[0118]假设所述第一部分正则表达式为:regl,所述第二部分正则表达式为:reg2,那么所述待收集的字符串的正则表达式为:regl+ “(”+reg2+ “)”+.*。
[0119]进一步的,正则表达式的结尾一般以第五预设标识(结尾。其中”表示一个任意字符,表示O个或多个,就是匹配后面有任意多个字符或者没有字符,由于生成待收集字符串的正则表达式不用包括后面的字符的特征,所以用结尾。
[0120]需要说明的是,上述生成正则表达式的步骤顺序,实际上并不限定必须严格按照上述顺序。有些步骤也可以在互不依赖的情况下并行执行,比如步骤S510至S530。
[0121]以下以上述例子详细说明正则表达式的获得方法:
[0122]所述待收集字符串为:“2014-11-0219:46:03.895”,所述第一字符串为,那么所述第二字符串为:“][INFO] access-127.0.0.1—"GET/HTTP/1.HOfOlT'
[0123]先判断所述第一字符串“[”,所述第一字符串〃["不符合步骤S510有关的第二预设规则,进入步骤S520判断所述待收集的字符串“2014-11-0219:46:03.895”,所述待收集的字符串“2014-11-0219:46:03.895”不符合步骤S520有关的第三预设规则,进入步骤S530,依次遍历所述第一字符串“[”中的字符,判断所述第一字符串中的字符是否为分隔字符,“[”是分隔字符且需要转义,故返回“\\[”作为第一部分正则表达式。
[0124]然后将所述待收集的字符串“2014-11-0219:46:03.895”作为上述确定第一部分正则表达式操作中的第一字符串,将所述第二字符串“][INFO]access-127.0.0.1—"GET/HTTP/1.1〃304-〃0K〃”作为上述确定第一部分正则表达式操作中的待收集的字符串,并执行上述操作。先判断字符串“2014-11-0219:46:03.895”,该字符串“2014-11-0219:46:03.895”不符合步骤S510有关的第二预设规则,进入步骤S520开始判断字符串 “][INFO]access-127.0.0.1—"GET/HTTP/1.1〃304_〃0K〃”,该字符串符合步骤S520所述的第三预设规则中当所述待收集的字符串不为空,且所述待收集的字符串的第一个字符是分隔符号,且所述第一字符串不包含所述待收集的字符串的第一个字符的规则,也即该字符串的第一个字符〃]〃是分隔符号,且此处字符串“2014-11-0219:46:03.895”不包含字符串 “][INFO]access-127.0.0.1—"GET/HTTP/1.1〃304_〃0K〃” 的第一个字符“]”,返回“ [? ] + ”作为第二部分正则表达式。
[0125]由于第二部分正则表达式为:“Γ]]+”,不是以第五预设标识(结尾,故当用户需要收集的字符串为:“2014-11-0219:46:03.895”时,最终生成的正则表达式为:\\[([?]+).*。
[0126]进一步的,当用户需要获得输入的整个日志片段的正则表达式时,可以通过依次选中具有一定意义的字符串,最后以一定规则将每个选中的字符串的正则表达式拼接起来。
[0127]比如上述日志片段:“[2014-1卜0219:46:03.895] [INFO]access-127.0.0.1—"GET/HTTP/1.1"304-"0K"”。
[0128]首先,选中“2014-11-0219:46:03.895”,所述第一字符串为:“[”,所述待收集的字符串为:“2014-11-0219:46:03.895”,所述第二字符串为:“][INFO]access-127.0.0.1—"GET/HTTP/1.1〃304_〃0K〃”,故返回的结果为 “\\[ (Γ] ]+).*”。
[0129]然后,选中“INF0”,所述第一字符串为:“][”,所述待收集的字符串为:“INF0”,所述第二字符串为:“]access-127.0.0.1—"GET/HTTP/1.1〃304_〃0K〃”,故返回的结果为“]\\s\\[(\\w+).*,,。
[0130]接着,选中“access”,所述第一字符串为:“]”,所述待收集的字符串为:“access”,所述第二字符串为:“_127.0.0.1—"GET/HTTP/1.1〃304_〃0K〃”,故返回的结果为“]\\s (\\w+).* ”。
[0131]接着,选中“127.0.0.1”,所述第一字符串为所述待收集的字符串为:“127.0.0.1”,所述第二字符串为:“一〃GET/HTTP/l.1〃304_〃0K〃”,故返回的结果为
[0132]接着,选中“GET/HTTP/1.1”,所述第一字符串为:“一〃”,所述待收集的字符串为:“GET/HTTP/1.1”,所述第二字符串为:“〃304-〃0K〃”,故返回的结果为“\\s_\\s-\\s\"(r\"]+).*,,。
[0133]接着,选中“304”,所述第一字符串为所述待收集的字符串为:“304”,所述第二字符串为:“ _〃0Κ〃 ”,故返回的结果为“ \〃\\s (Wd+).*
[0134]接着,选中“0Κ”,所述第一字符串为所述待收集的字符串为:“0Κ”,所述第二字符串为:“ 〃 ”,故返回的结果为“(\\w+).*
[0135]最后,将上述返回的结果拼接起来,除了最后的返回结果,其他返回结果结尾的去掉,并对转义的字符进行恢复,得到最终的正则表达式为:
[0136]\ [ (Γ] ] +) \d+] \s\[ (\w+) ]\s (\w+) \w+\s_\s (\s+) \s_\s_\s" ([~"] +) \d+"\s (\d+)\s_\s〃(\w+).*
[0137]进一步的,当要获取多于一个具有一定意义的字符串的正则表达式时,所述前面的字符串选择的时候是选择所述要收集的字符串之前的字符串,但要去除已经选择过的字符串及选择过字符串前面的字符串。
[0138]由此可见,本申请实施例提供的技术方案通过响应于触发指令,可以根据用户的需要获取预设字符串中待收集的字符串,并根据预设规则生成所述待收集字符串的正则表达式。与现有技术相比,大大提高了用户使用的灵活性,可以根据用户需要生成相应字符串的正则表达式,进而可以根据该正则表达式解析出对用户有用的字符串。
[0139]以下介绍本申请一种正则表达式的生成系统的实施例。结合附图3,该系统600包括:
[0140]预设字符串获得单元610,用于获得预设字符串。
[0141]待收集字符串获得单元620,用于响应于触发指令获得预设字符串中的待收集字符串。
[0142]第一字符串获得单元630,用于从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串。
[0143]第二字符串获得单元640,用于从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串。
[0144]正则表达式生成单元650,用于根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。
[0145]在一个优选的实施例中,所述待收集字符串获得单元620包括:
[0146]第一操作模块,用于响应选择并拖拽所述预设字符串中的部分字符串的操作指令,获得待收集字符串;或,
[0147]第二操作模块,用于响应点击所述预设字符串中的部分字符串的起始位置的第一指令,以及响应点击所述预设字符串中的部分字符串的结束位置的第二指令,获得待收集字符串;或,
[0148]第三操作模块,用于选择并响应右击所述预设字符串中的部分字符串所在区域的操作指令,获得待收集字符串。
[0149]由此可见,本申请实施例提供的一种正则表达式的生成方法及系统,通过响应于触发指令,可以根据用户的需要获取预设字符串中待收集的字符串,并根据预设规则生成所述待收集字符串的正则表达式。与现有技术相比,大大提高了用户使用的灵活性,可以根据用户需要生成相应字符串的正则表达式,进而可以根据该正则表达式解析出对用户有用的字符串。
[0150]在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device, PLD)(例如现场可编程门阵列(Field ProgrammableGate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Descript1n Language,HDL),而HDL也并非仅有一种,而是有许多种,如 ABEL(Advanced Boolean Express1n Language)、AHDL(Altera Hardware Descript1nLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Descript1n Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Descript1n Language)等,目前最普遍使用的是 VHDL(Very-High_SpeedIntegrated Circuit Hardware Descript1n Language)与 Verilog2。本令页域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
[0151]控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Applicat1n Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20 以及 Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
[0152]本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0153]上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
[0154]为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0155]通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。该计算机软件产品可以包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。该计算机软件产品可以存储在内存中,内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(R0M)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-R0M)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括短暂电脑可读媒体(transitory media),如调制的数据信号和载波。
[0156]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0157]本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、月艮务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
[0158]本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0159]虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。
【主权项】
1.一种正则表达式的生成方法,其特征在于,包括: 获得预设字符串; 响应于触发指令获得预设字符串中的待收集字符串; 从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串; 从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串; 根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。2.根据权利要求1所述的正则表达式的生成方法,其特征在于,所述触发指令包括: 选择并拖拽所述预设字符串中的部分字符串的操作;或, 点击所述预设字符串中的部分字符串的起始位置的第一指令,以及点击所述部分字符串的结束位置的第二指令;或, 选择并右击所述预设字符串中的部分字符串所在区域的操作。3.根据权利要求1所述的正则表达式的生成方法,其特征在于,所述第一预设规则包括: 当所述第一字符串符合第二预设规则时,返回对应结果并作为所述第一部分正则表达式。4.根据权利要求3所述的正则表达式的生成方法,其特征在于,所述第二预设规则包括: 当所述第一字符串不为空,且所述第一字符串是纯数字字符组成,且所述待收集的字符串为空或所述待收集的字符串的第一个字符不是纯数字字符时,返回第一预设标识。5.根据权利要求3所述的正则表达式的生成方法,其特征在于,所述第二预设规则包括: 当所述第一字符串不为空,且所述第一字符串是包含字母的纯单词字符组成,且所述待收集的字符串为空或所述待收集的字符串的第一个字符不是纯单词字符时,返回第二预设标识。6.根据权利要求3所述的正则表达式的生成方法,其特征在于,所述第二预设规则包括: 当所述第一字符串不为空,且所述第一字符串是非空字符组成,且所述待收集的字符串为空字符串或所述待收集的字符串的第一个字符是空字符时,返回第三预设标识。7.根据权利要求3所述的正则表达式的生成方法,其特征在于,所述第二预设规则包括: 当所述第一字符串为空时,返回第四预设标识。8.根据权利要求1所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 当所述待收集的字符串符合第三预设规则时,返回对应结果并作为所述第一部分正则表达式。9.根据权利要求8所述的正则表达式的生成方法,其特征在于,所述第三预设规则包 括: 当所述待收集的字符串不为空,且所述待收集的字符串的第一个字符是分隔符号,且所述第一字符串不包含所述待收集的字符串的第一个字符时,返回第五预设标识。10.根据权利要求8所述的正则表达式的生成方法,其特征在于,所述第三预设规则包括: 当所述待收集的字符串为空时,返回第六预设标识。11.根据权利要求1所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 当所述第一字符串符合第四预设规则时,返回对应结果并作为所述第一部分正则表达式。12.根据权利要求11所述的正则表达式的生成方法,其特征在于,所述第四预设规则包括: 定义第一预设变量,依次遍历所述第一字符串中的字符,判断所述第一字符串中的字符是否为分隔字符; 当所述判断为是时,将所述字符追加到第一预设变量; 当所述判断为否时,停止遍历; 判断是否遍历全部所述第一字符串中的字符。13.根据权利要求12所述的正则表达式的生成方法,其特征在于,当遍历全部所述第一字符串中的字符时,所述第四预设规则还包括: 返回第一预设变量。14.根据权利要求12所述的正则表达式的生成方法,其特征在于,当没有遍历全部所述第一字符串中的字符,且当所述没有遍历的字符串中不包含分隔字符时,所述第四预设规则还包括: 获取所述第一字符串中没有遍历的字符串,将所述第一字符串中没有遍历的字符串作为所述第一字符串。15.根据权利要求14所述的正则表达式的生成方法,其特征在于,当当前第一字符串符合第二预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。16.根据权利要求14所述的正则表达式的生成方法,其特征在于,当当前第一字符串符合第四预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。17.根据权利要求12所述的正则表达式的生成方法,其特征在于,当没有遍历全部所述第一字符串中的字符,且当所述没有遍历的字符串中包含分隔字符时,所述第四预设规则还包括: 获取所述第一字符串中没有遍历的字符串; 根据所述没有遍历的字符串中的第一个分隔字符将所述没有遍历的字符串分隔为第一个分隔字符前面的字符串、第一个分隔字符和第一个分隔字符后面的字符串。18.根据权利要求17所述的正则表达式的生成方法,其特征在于,将所述第一个分隔字符前面的字符串作为第一字符串,当当前第一字符串符合第二预设规则时,将返回的结果追加到第一预设变量。19.根据权利要求17所述的正则表达式的生成方法,其特征在于,当当前第一字符串不符合第二预设规则时,所述第四预设规则还包括: 将所述第一个分隔字符作为待收集的字符串,当当前待收集的字符串符合第三预设规则时,将返回的结果追加到第一预设变量。20.根据权利要求17所述的正则表达式的生成方法,其特征在于,当当前第一字符串符合第四预设规则时,所述第四预设规则还包括: 将返回的结果追加到第一预设变量。21.根据权利要求18至20任一所述的正则表达式的生成方法,其特征在于,所述第四预设规则还包括: 将所述第一分隔字符作为第一字符串,当当前第一字符串符合第二预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。22.根据权利要求18至20任一所述的正则表达式的生成方法,其特征在于,所述第四预设规则还包括: 将所述第一个分隔字符后面的字符串作为待收集的字符串,当当前待收集的字符串符合第三预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。23.根据权利要求18至20任一所述的正则表达式的生成方法,其特征在于,所述第四预设规则还包括: 将所述第一分隔字符作为第一字符串,当当前第一字符串符合第四预设规则时,将返回的结果追加到第一预设变量,返回第一预设变量。24.根据权利要求3、8或11任一所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 将所述待收集的字符串作为第一字符串,当当前第一字符串符合第二预设规则时,返回对应结果并作为所述第二部分正则表达式。25.根据权利要求24所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 根据所述第一部分正则表达式和所述第二部分正则表达式生成所述待收集的正则表达式。26.根据权利要求3、8或11任一所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 将所述第二字符串作为待收集的字符串,当当前待收集的字符串符合第三预设规则时,返回对应结果并作为所述第二部分正则表达式。27.根据权利要求26所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 根据所述第一部分正则表达式和所述第二部分正则表达式生成所述待收集的正则表达式。28.根据权利要求3、8或11任一所述的正则表达式的生成方法,其特征在于,所述第一预设规则还包括: 将所述待收集的字符串作为第一字符串,当当前第一字符串符合第四预设规则时,返回对应结果并作为所述第二部分正则表达式。29.根据权利要求28所述的正则表达式的生成方法,其特征在于,所述第一预设规则 还包括: 根据所述第一部分正则表达式和所述第二部分正则表达式生成所述待收集的正则表达式。30.一种正则表达式的生成系统,其特征在于,包括: 预设字符串获得单元,用于获得预设字符串; 待收集字符串获得单元,用于响应于触发指令获得预设字符串中的待收集字符串; 第一字符串获得单元,用于从所述预设字符串中识别在所述待收集字符串前面的字符串,所述前面的字符串作为第一字符串; 第二字符串获得单元,用于从所述预设字符串中识别在所述待收集字符串后面的字符串,所述后面的字符串作为第二字符串; 正则表达式生成单元,用于根据所述待收集字符串、所述第一字符串和所述第二字符串的字符特征以第一预设规则生成所述待收集字符串的正则表达式。31.根据权利要求30所述的正则表达式的生成系统,其特征在于,所述待收集字符串获得单元包括: 第一操作模块,用于响应选择并拖拽所述预设字符串中的部分字符串的操作指令,获得待收集字符串;或, 第二操作模块,用于响应点击所述预设字符串中的部分字符串的起始位置的第一指令,以及响应点击所述预设字符串中的部分字符串的结束位置的第二指令,获得待收集字符串;或, 第三操作模块,用于选择并响应右击所述预设字符串中的部分字符串所在区域的操作指令,获得待收集字符串。
【文档编号】G06F17/22GK105868166SQ201510032801
【公开日】2016年8月17日
【申请日】2015年1月22日
【发明人】罗光春, 孙廷韬
【申请人】阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1