营销神器

 找回密码
 快速注册

正则表达式10分钟入门、基础

2013-12-28 10:00| 发布者: 刺客| 查看: 22435| 评论: 0

摘要: 如有不确定的正则表达式,可以用正则调试工具查看下。工具位置:规则编辑器 - 正则工具
1、取:7cd2c8484036832e1804f79e4fa63b7d

源码:id="k" name="csrf_token" value="7cd2c8484036832e1804f79e4fa63b7d" />

正则:id="k" name="csrf_token" value="(.*?)" /> 
正则: id="k" name="csrf_token" value="(.*?)"
正则:name="csrf_token" value="(.*?)"
正则:value="(.*?)"  

备注:如果页面有很多个value=",那么此正则就不适合,但如果只有上面的这一小部分内容,可以这样写。


2、取:IvR6u01Q

源码:\u003cli cateid=\"IvR6u01Q\" class=\"cate privatecate

正则:\\u003cli cateid=\\"(.*?)\\" class=\\"cate privatecate
正则:cateid=\\"(.*?)\\"

取:6736874

文本:los?m=6736874"

正则:\?m=(.*?)"

备注:\为特殊字符,所以需要前面加转义符斜杠\

3、取:1cd2c844b7d

源码:uid=1cd2c844b7d
name=hello

正则:uid=(.*?)
name=hello
正则:uid=(.*?)\n

备注:\n 与换行符字符匹配,也可以直接用多行正则,正则调试工具里面有详细说明

4、正则如何取DSUGGYGR=6589758里面的数字?

正则:([0-9]+)  

5、正则如何取DSUGGYGR=Ks5f34f5k里面=左边的文本?

正则:^(.*)=

6、正则如何取DSUGGYGR=Ks5f34f5k里面=右边的文本?

正则:=(.*)$


正则如何取“刘爽-爱如此狼狈-国语----https://yunpan.cn/xxx----f35a右边的文本?

正则:----.*?----(.*)$


正则如何取刘爽-爱如此狼狈-国语----https://yunpan.cn/xxx----f35a”里面中间的文本?

正则:----(.*?)----



7、正则如何取DSUGGYGR=Ks5f34f5k全部文本?

正则:(.*)  --只匹配一行
正则:([\s\S]*)  --匹配整个网页内容,包括回车等

8、正则如何取有某种格式的电话号码?

如:  xxx     139 1234 5678     xxxxx   
正则:(\d{3} \d{4} \d{4})

如:  xxx     023-47000000     xxxxx   
正则:(\d{3}-\d{8})

以上只是使用营销神器时常用的正则,只需要先了解这些简单的正则,有什么特殊正则搞不定再论坛提问。

9、提取多个匹配文本(下面蓝色文本)

返回文本:
id=aaa&n
id=bbb&n=1
id=ccc&n=1

需要用到3个正则(参数标签):
取第1个正则:id=(.*?)&n
取第2个正则:id=.*?&n[\s\S]*?id=(.*?)&n
取第3个正则:id=.*?&n[\s\S]*?id=.*?&n[\s\S]*?id=(.*?)&n

例1:

[发布前提交1参数1]id=(.*?)&n[/发布提交1参数1]
[发布前提交1参数2]id=.*?&n[\s\S]*?id=(.*?)&n[/发布提交1参数2]
[发布前提交1参数3]id=.*?&n[\s\S]*?id=.*?&n[\s\S]*?id=(.*?)&n[/发布提交1参数3]

--上面这个情况比较特殊,因为3行文本,没有唯一特征
--表达式 “.*?” 可以简单理解为“排除”,上面有空行,所以用表达式“[\s\S]*?”
--上面是3个正则,第一个标签取第一个匹配文本
--第2个正则,表示排除第一个匹配结果,也就是取第2个蓝色文本
--第3个正则,表示排除第一个和第二个匹配结果,也就是取第3个蓝色文本

例2:(可直接复制测试)

[登录提交网址1]返回:{"name":"token","controlType":"Hidden","value":"660f72236a5e9994b23d38caf34d6b16"},{"name":"8cb44b44cba8fde","type":"hidden","value":"537c1eb5e61536128643","required":1,"controlType":"Hidden"}],"forms":{"tabs":{"input":[]},[/登录提交网址1]
[登录提交1参数1]{"name":"token","controlType":"Hidden","value":"(.*?)"}[/登录提交1参数1]
[登录提交1参数2]{"name":"token","controlType":"Hidden","value":".*?"},{"name":"(.*?)"[/登录提交1参数2]
[登录提交1参数3]{"name":"token","controlType":"Hidden","value":".*?"},{"name":".*?","type":"hidden","value":"(.*?)"[/登录提交1参数3]

--上面这个例子,并没有换行符,所以我们没有用“[\s\S]*?”,而是用的“.*?”


10、如何取随机文本里面的32位字符串?

返回文本:(1);',[],23,'function|jQuery|return|userAgent|typeof|var|if|md5|window|70|||||1393749906|getfp|72|110|navigator|else|join|81|02d4dfeefcfd17c7de0422dc60cde600'.split('|'),0,{}))  --这部分文本中的02d4dfeefcfd17c7de0422dc60cde600位置是会随机变动的

正则:([a-zA-Z0-9]{32,32})

结果:02d4dfeefcfd17c7de0422dc60cde600

11、只取验证码的数字?

如:success|【家在深圳】您的验证码为:945249
正则:([0-9]{6})
结果:945249


12、哪些正则需要加转义符\

主要有这些 * . ? + $ ^ [ ] ( ) { } | \ / (注意,都是半角英文符号)

返回文本1:DISCUZUPLOAD|0|1525246|1|0 (取1525246值)

正则:DISCUZUPLOAD\|0\|(.*?)\|

结果:1525246

返回文本2:parent.location='/d'+226410945+'.htm'(取226410945值)

正则:parent.location='/d'\+(.*?)\+'.htm'

结果:226410945

返回文本3:{wrap.click()}})(!1,'d5cd5121728ba75344e8a48f194718')

方法1正则:!1,'(.*?)'\)   --简单写可以是这样
方法2正则:{wrap.click\(\)}}\)\(!1,'(.*?)'\)     --也可以把()加上转义符
方法3正则:{wrap.click\(\)\}\}\)\(!1,'(.*?)'\) --也可以把{}加上转义符,当然也可以不加
方法4正则:{wrap\.click\(\)\}\}\)\(\!1,'(.*?)'\) --也可以把.!加上转义符,当然还是可以不加

结果:d5cd5121728ba75344e8a48f194718


13、正则怎么取红色的部分 s=930e0b27-700e-4b25-8b23-5b1t3j7q;这串是随机值的

正则:s=.*?-.*?-.*?-.*?-..(.*?);

结果:1t3j7q

14、偶尔出现一个换行符,应该如何获取?

返回文本:
x=aa<
x=bb<
x=cc
<
x=dd<

正则:x=(.*?)\n*?<  --方法不是唯一的,看一下正则基础教程后,就能很好理解

结果依次为:aa、bb、cc、dd

15、如何正则获取下面的网址:

succeedhandle_blogEdit('http:\/\/www.xxx.net\/blog\/317\/1132245\/316212.html' 


--在营销神器里面,遇到正则问题,只需要查看上面的这些例子,就能得到答案。并不需要花很多时间去学习正则表达式,最多也就是要了解一下.、*、?、\等符号代表上面意思,这些在[营销神器]的[正则调试工具]左边,有详细说明。

16、如何正则获取 id="20160223140128"; 里面的红色内容?

答:分析一下,20160223 这是今天的年月日(2016-02-23 ),140128 这是时分秒(14:01:28),这个ID可能是刚刚发布成功的文章url,所以我们不能用系统的{时间=时}:{时间=分}:{时间=秒}标签来生成,我们还是选择用正则表达式获取。

正则1:id="{时间=年}{时间=月}{时间=日}(.*?)"
正则2:查看下面17

17、如何正则获取 500230198911091345 里面的红色内容?

答:除上面方法以外,还可以用下面正则来获取

正则:.{6}(.{8})     结果:19891109  (另外一种写法:......(........)

如何想把年月日,取为“1989-11-09”这种格式,我们就需要用3个参数标签来获取,正则如下:
正则: .{6}(.{4})    结果:1989     ---排除前面6个字符,取之后的4个字符
正则:.{10}(.{2})   结果:11          ---排除前面10个字符,取之后的2个字符
正则:.{12}(.{2})   结果:09        ---排除前面12个字符,取之后的2个字符
正则:(.{6})        结果:500230     ---取左边的6个字符
正则:(.{7}$)        结果:091345   ---取右边的6个字符


18、如何过滤html代码,只保留纯文本?

答:  正则替换表达式删除不需要的代码(过滤掉所有乱七八糟的代码)
正则替换标签参考:http://www.wzdr.cn/article-527.html
1.过滤掉含有<>的所有html标签,可以这样写:<[^>]+>|&.{1,8}; 
2.过滤script标签: <#script[\s\S]*?<#/script>
3.过滤style标签:<#style[\s\S]*?<#/style> 或 <#p style[^>]+>
4.过滤img标签:<#img[^>]+>
5.如果都有,可以用|线隔开:<#script[\s\S]*?<#/script>|<#style[\s\S]*?<#/style>|<[^>]+>|&.{1,8};
6.不想过滤<#p><#/p>标签,过滤其他的:([^<#/p>]<[^>]+>|&.{1,8};]|<#p style[^>]+>|<#img[^>]+>)
7.过滤html标签,但保留br标签:<(?!br)[^>]*>   --如果要保留img标签可以这样<(?!img)[^>]*>
8.强大的正则替换,可以解决所有的匹配问题
注意:以上内容中的所有#号请自行删除。


19、如何匹配编码文本?如:“娴嬭瘯??缂栫爜鏂囨湰”

答:请先解码,否则会出现无法匹配的情况。


20、参数标签是否支持多个正则匹配?

答:3.6.2.0以上版本支持,需要用|竖线隔开。如下:

[登录前2cookie1]login%5FTOKENCODE=(.*?);|login%5FTOKENCODE=(.*)$[/登录前2cookie1]

21、含有白字符、空格、制表符时,应该如何写?(如下)

target="_blank" >
                      这里是我要获取的内容
                  <#/a>


答:可以用到此语法 \s+

解释:\s 与任何白字符匹配,包括空格、制表符、分页符等。等价于"[\f\n\r\t\v]"。
  + 匹配前一个字符一次或多次。例如,"zo+"可以匹配"zoo",但不匹配"z"。
正则:target="_blank" >\s+(.*?)\s+<#/a>
结果:这里是我要获取的内容

补充:如果要获取的内容,前面没有空额,不需要前面的\s+
  如果要获取的内容,后面没有空额,不需要后面的\s+


22、如何取所有子匹配中,最大的数字?

[发布提交网址1]http://top.baidu.com/buzz?b=1[/发布提交网址1]
[发布提交1参数1]target="_blank"#>http://www.wzdr.cn/{取最大数字}<#/a>[/发布提交1参数1]  --请把所有#号删除后测试
--正则匹配所有的文本,返回其中匹配到的最大的一个值


23、如何取所有子匹配中,最小的数字?

[发布提交网址1]http://top.baidu.com/buzz?b=1[/发布提交网址1]
[发布提交1参数1]target="_blank"#>http://www.wzdr.cn/{取最小数字}<#/a>[/发布提交1参数1]  --请把所有#号删除后测试
--正则匹配所有的文本,返回其中匹配到的最小的一个值

24、如何取所有子匹配中,随机结果?

[发布提交网址1]http://top.baidu.com/buzz?b=1[/发布提交网址1]
[发布提交1参数1]target="_blank"#>http://www.wzdr.cn/{取随机结果}<#/a>[/发布提交1参数1]  --请把所有#号删除后测试,需要3.8.5.9以上版本支持
--正则匹配所有的文本,返回其中匹配到的随机一个值


25、如何匹配出页面中的所有手机号码?

答:正则为 (1[3,8,5]\d{9,9}) --比如139、138、188、158、186开头的手机号码


27、匹配纯汉字(中文)

答:([\u4e00-\u9fa5]+) --如果文本中含有特殊字符,可能无法匹配正确


28、匹配一级域名(结果如:wzdr.cn wzdr.cc)

答:([a-z0-9][a-z0-9\-]*?\.(?:com|cn|net|org|gov|info|la|cc|co)) --匹配二级或多级域名的主域名






[自我提醒:此页面不能用pre和html代码,否则会页面错乱]
[2016-05-30更新]
[2016-06-05更新]
[2016-07-18更新]
[2016-09-11更新]
[2016-09-16更新]
[2016-09-24更新]
[2016-11-17更新]
[2016-12-11更新]
[2016-12-24更新]
[2017-05-08更新]
[2017-07-10更新]
[2017-09-06更新]
[2017-11-06更新]
[2017-11-29更新]
[2018-04-12更新]
[2018-09-01更新]
[2018-09-05更新]
11

鲜花
2

握手

雷人
1

路过
1

鸡蛋

刚表态过的朋友 (15 人)

相关阅读

抢沙发||关于我们|手机版|营销神器 ( 蜀ICP备14013818号 )

GMT+8, 2018-10-23 03:45

Powered by 营销神器论坛 Discuz!X3.4

© 2007-2018 营销工具

返回顶部