关于正则表达式

来源:互联网 发布:热血沙尘 全套源码 编辑:程序博客网 时间:2024/06/05 11:40

关于正则表达式

 

使用正则表达式辅助工具,RegexTester.exe,可以验证正则写的对不对。

在写XML配置时,正则表达式显得非常的重要,它关系到提取的信息到底是否正确。如果书写错误,会影响下面的过程。下面对常用的正则表达式,进行一个说明。

举例:(1)对这段内容HM.RollupData(newHM.Rollup("cmU5KG2wtg5RGVAGw75afaHg2",null,null,1,1,"2015-09-21T02\x3a53\x3a00.757Z","\x3cspanemail\x3d\x22apprentice201201\x26\x2364\x3b126.com\x22\x3eapprentice126\x3c\x2fspan\x3e"  想提取黄色字体的cmU5KG2wtg5RGVAGw75afaHg2和1

正则表达式:HM.Rollup\("([^"]+)",[^,]+,[^,]+,[^,]+,([\d])

解释:HM.Rollup\("代表是以HM.Rollup("开头的,\是转义字符,因为后面有(,所以才有了\。([^"]+)这里的括号()可认为是表示提取的意思,[^”],表示提取除了”的部分,+表示至少重复一次或者多次,紧接着的”表示以”结束。到这里HM.Rollup\("([^"]+)"就提取了cmU5KG2wtg5RGVAGw75afaHg2紧接着是一个逗号,[^,]+表示匹配不是逗号的部分一次或者多次,没有加()就意味着只匹配,但是不提取内容,即匹配null。紧接着是一个逗号,接下来的[^,]+表示匹配第二个null,紧接着是一个逗号,接下来的[^,]+表示匹配1,紧接着是一个逗号,([\d])有()意味着要提取内容,[\d]表示提取匹配一个数字字符。等价于 [0-9]。此处的([\d])就提取出了1

举例:(2)对这段内容

urlPost:'https://login.live.com/ppsecure/post.srf?wa=wsignin1.0&rpsnv=12&ct=1442647827&rver=6.4.6456.0&wp=MBI_SSL_SHARED&wreply=https:%2F%2Fsnt150.mail.live.com%2Fdefault.aspx%3Frru%3Dinbox&lc=1033&id=64855&mspco=1&pcexp=false&bk=1443075601&uaid=56f1c6e7abc041288397ead1bee54918&pid=0'提取单引号里面的部分

正则表达式:urlPost\s*:\s*'([^']+)'

解释:urlPost\s*:\s*'表示以urlPost\s*:\s*'开始,最右边的’表示以’结束。([^']+)表示真正要提取的内容,提取除了’的部分一次或者多次,如此以来便把黄色字体内容提取出来。\s表示匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。*表示匹配零次或多次。一般都用+。

举例:(3)对这段内容

name="PPFT" id="i0327"value="DbvSEykUhYPWX2yssoU1oovfJG!df4bxr4Gi9LO5ITeUv1*stzISiYN8rsc1!Bsmg4frfqILVgxeaZAVy8Hvk*ZtHH*mHRFCzt4uZN8FUo2IpPa6cUBKPYRi9**qlVQ8e*kE8JpJR1auDwiGwkL1r8XEDhgJntONOXjqSGbYuFH8fr0CP052TEPgtGtPMys!bauJqvJLqKWf2f5Wot4azQi*rHxoHCVdFe3PQZfjnGstMoDqGuTUUotYejWH*TpaNA$$"/>'想提取黄色字体的内容。

正则表达式:PPFT.*value\s*=\s*”([^”]+)”

解释:PPFT.*value\s*=\s*”表示PPFT.*value\s*=\s*”开始,最后面的”表示以”结束。PPFT后面的.表示匹配任意一个字符,*表示匹配零次或多次。紧接着是一个value=,\s表示匹配任何空白字符,包括空格、制表符、换页符等等。*表示匹配零次或多次。([^”]+)

举例:(4)对这段内容

location.replace("https://snt150.mail.live.com/default.aspx?rru=inbox");

想提取黄色字体的内容。

正则表达式:location.replace\s*\(\s*”([^”]+)

解释:location.replace\s*\(\s*”表示以location.replace\s*\(\s*”开始,

\s表示匹配任何空白字符,包括空格、制表符、换页符等等。*表示匹配零次或多次。\(表示有个(,\是转义字符,紧接着是\s,然后是*,\s表示匹配任何空白字符,包括空格、制表符、换页符等等。*表示匹配零次或多次。紧接着是个“,这些就是前面location.replace("的表达。([^”]+)表示真正要提取的内容,提取除了”的部分一次或者多次,这样就把黄色字体的内容提取出来。

举例:(5)对这段内容

location.replace ("https://snt150.mail.live.com/default.aspx?rru=inbox");想提取黄色字体的内容。

正则表达式:replace\s*\(\s*“(https://[^/]+/)

解释:replace\s*\(\s*“的解释同例(4),(https://[^/]+/)括号表示要提取的内容,提取https://,[^/]除了/的部分,+表示一次或者多次,然后再加上/。然后提取出来的内容就是https://snt150.mail.live.com/

举例:(5)对这段内容

New HM.Folder("fljunk","flAAAAAAAAAAAAAAAAAAAAAA2",0,1,0,"0",false,false,false,0,0,null,"\u5783\u573e\u90ae\u4ef6",0)),想提取黄色字体的内容。

正则表达式: Folder\(“([^”]+)”,”[^”]+”[^”]+”[^”]+”[^”]+”([^”]+)”

解释:Folder\("表示以Folder\("开头,\(是因为(要加转义字符\。([^"]+)"

提取不是"的内容一次或多次,以"结束,提取出来了fljunk。然后紧跟一个逗号,逗号后面是引号",[^”]+匹配不是引号的部分一次或者多次但不提取,紧接着是一个引号",此时把flAAAAAAAAAAAAAAAAAAAAAA2匹配出来了,下一个[^”]+匹配不是引号"的部分一次或者多次,把0,1,0匹配出来,紧接着是一个引号",下一个[^”]+匹配不是引号"的部分一次或者多次,把0匹配出来,紧接着是一个引号",下一个[^”]+匹配不是引号"的部分一次或者多次,把false,false,false,0,0,null,匹配出来,紧接着是一个引号",([^”]+)”提取不是引号"的部分,以引号"结束,这样就把\u5783\u573e\u90ae\u4ef6提取出来。

小结:

(1)正则表达式可以有不同的写法,只要能达到提取想要内容的效果,形式可以多种多样。

(2)有时,写的一个正则表达式,把符合正则表达式的所有内容都提取出来了,不止一条,中间一条是你所想要提取的内容,此时,就要考虑正则表达式提取内容不唯一的情况的解决方法。方案一:可能是写的正则有问题,多找找提取的几条数据的区别,比如前后的字符。方案二:可以通过多次提取的方法,在提取的不止一条内容的情况下,再写正则表达式,提取出来自己想要的内容。

0 0