关于正则表达式
来源:互联网 发布:热血沙尘 全套源码 编辑:程序博客网 时间: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)有时,写的一个正则表达式,把符合正则表达式的所有内容都提取出来了,不止一条,中间一条是你所想要提取的内容,此时,就要考虑正则表达式提取内容不唯一的情况的解决方法。方案一:可能是写的正则有问题,多找找提取的几条数据的区别,比如前后的字符。方案二:可以通过多次提取的方法,在提取的不止一条内容的情况下,再写正则表达式,提取出来自己想要的内容。
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式的
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式
- 关于java正则表达式
- 关于正则表达式
- 关于正则表达式
- 正则表达式 关于/num
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式
- 关于正则表达式问题
- 缩放WebView中图片尺寸 适合屏幕尺寸
- 【bzoj4300】绝世好题
- OC第六天 block
- Ubuntu 使用校园网 笔记
- Delete Duplicate Emails---easy
- 关于正则表达式
- linux的僵尸进程和孤儿进程及解决方法
- java线程
- C#学习笔记 基本数据类型
- android学习之使用AIDL实现进程间的通讯
- Linux 键盘模拟测试
- 使用《UrlHash/锚点》解决移动设备中的单页面应用的物理[返回键]带来的困扰
- linux新装的系统下su命令不能使用的解决办法
- Opencv (Opencv2)结合MFC学习数字图像处理---显示图片