吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3724|回复: 25
收起左侧

[其他转载] 正则表达式(一)

  [复制链接]
yuqiaobin 发表于 2020-2-25 20:26
本帖最后由 yuqiaobin 于 2020-2-26 16:18 编辑

模糊匹配一、使用量词
使用量词。譬如{m,n},表示连续出现最少m次,最多n次比如/ab{2,5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”/ab{2,5}c/g,后面多了g,它是正则的一个修饰符。表示全局匹配
1.简写
{m,} 表示至少出现m次。
{m} 等价于{m,m}表示出现m次。
? 等价于{0,1}表示出现或者不出现。
+ 等价于{1,}表示出现至少一次。追加嘛,至少要一次才能追
* 等价于{0,}表示出现任意次,有可能不出现。通配符)
二、使用字符组。
譬如[abc],表示该字符是可以字符“a”、“b”、“c”中的任何一个  /a[123]b/可以匹配如下三种字符串:"a1b"、"a2b"、"a3b"
1. 使用范围广
利用连接符‘-’,如[0-9a-z]表示既可以是数字也可以是小写字母
2. 排除字符组
你会不想要一些字符,你可以使用^表示脱去
例如[^abc],表示是一个除"a"、"b"、"c"之外的任意一个字符
3.常用的简写形式
\d就是[0-9]。表示是一位数字
\D就是[^0-9]。表示除数字外的任意字符。
\w就是[0-9a-zA-Z_]。表示数字、大小写字母和下划线。记忆方式:w是word的简        写,也称单词字符
\W是[^0-9a-zA-Z_] 非单词字符。
\s是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车        符、换页符。
\S是[^ \t\v\n\r\f]。 非空白符。
.就是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔        符和段分隔符除外。
注意大小写哦!!!
三.贪婪匹配和惰性匹配
正则/\d{2,5}/,表示数字连续出现2到5次。会匹配2位、3位、4位、5位连续数字那如果我只要2次,也就是满足匹配的下限,这就叫惰性匹配,如果要5次,也就是满足匹配的上限,这就叫贪婪匹配。
怎么实现惰性匹配呢?方法就是在你的量词后面加个问号。例如        {m,n}? {m,}? ?? +? *?
四.分支
具体形式如下:(p1|p2|p3),其中p1p2p3是子模式,用|(管道符)分隔,表示其中任何之一意思大概就和”或“差不多。
/good|goodbye/该正则表达式如果来识别goodbye这个单词,它匹配到是good,因为 | 符号是惰性的,如果匹配到第一个字符满足需求就会停止匹配(这好像和C语言的或有差不多的操作)
五.具体用处(五个例子,很有用!!!)
1. 写网页的时候,想要把你源码所有的颜色get出来,就可以使用正则表                达式
var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
        var string = "#ffbbad #Fc01DF #FFF #ffE";
        console.log( string.match(regex) );
        输出的结果是 ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]
2. 匹配时间的时候,比如22:33
var regex = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/;
        console.log( regex.test("23:59") );
        console.log( regex.test("02:07") );
        输出 true true
看到这里,你会觉得奇怪,^不是表示否定的吗???而这里的意思好像不是否定,没错,官方的文档是这样说的
[^ ]
否定的字符种类。匹配除了方括号里的任意字符
^
从开始行开始匹配.
$
从末端开始匹配.

明白差别了吗,^使用在字符组[]中才表示否定
3. 匹配日期的时候,比如2020-02-25
这个也不难啦,注意分类讨论
/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
4. 文件夹正则表达式
文件夹正则表达式.png
var regex = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/;
console.log( regex.test("F:\\study\\javascript\\regex\\") );
console.log( regex.test("F:\\study\\javascript") );
console.log( regex.test("F:\\") );
输出结果: true true true
5. id正则表达式
目的:<div id="container" class="main"></div>
提取出id="container"
如果你用/id=.*/(无限重复通配符)
这下会把直到最后一个双引号的内容全部囊括,出事。。。。
所以,惰性匹配,/id=.*?/惰性匹配只会获取一个
题外话:我之前写python爬虫玩的时候一直记得是“点星问”,却不知道其中的原理,现在终于懂了hhh
测试平台:https://regex101.com/r/dmRygT/1
参考文章:
https://www.zhihu.com/tardis/sogou/art/30750456
https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md#1-%E5%9F%BA%E6%9C%AC%E5%8C%B9%E9%85%8D
剩下的明天补充
附件的排版比较好一点。。。。


今天总结的第二份已发。
传送门。
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1116487&page=1&extra=#pid30228904

正则表达式.docx

31.01 KB, 下载次数: 80, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 8吾爱币 +6 热心值 +7 收起 理由
over_flow_ + 1 谢谢@Thanks!
wqxshhn + 1 谢谢@Thanks!
萨克 + 1 鼓励转贴优秀软件安全工具和文档!
我的爱是你 + 2 + 1 谢谢@Thanks!
mf1359 + 1 + 1 谢谢@Thanks!
BlovedCQ + 1 谢谢@Thanks!
hxw0204 + 1 + 1 谢谢@Thanks!
defloat + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hxw0204 发表于 2020-2-25 20:48
谢谢分享!
不忘记你的眼睛 发表于 2020-2-25 20:52
liujg 发表于 2020-2-25 20:52
defloat 发表于 2020-2-25 20:52
很详细,感谢楼主!
jayqqai 发表于 2020-2-25 20:54
收藏了,等更新。
17696091221 发表于 2020-2-25 20:55
谢谢分享
g93920079 发表于 2020-2-25 21:12
多谢楼主分享~~
萨克 发表于 2020-2-25 21:17
谢谢分享!!!
Gordon_c 发表于 2020-2-25 21:20
谢谢楼主,收集了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-13 13:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表