目录
❣️ 正则表达式概述
1. 准备:安装RegExpBuddy软件
2. 回顾:注册用户时,要求填写手机号
3. 问题:程序真的认识手机号吗?
4. 正则表达式(Regular Expression)
5. 为何使用正则表达式
❣️ 正则表达式初体验
❣️ 定义正则表达式
1. 普通字符
2. 最简单的正则表达式
3. 字符集
4. 预定义字符集
5. 数量词
6. 选择和分组
7. 指定匹配位置
◼️ 练习:电子邮件的正则表达式
总结:知识点提炼
– 安装RegExpBuddy软件——专门测试正则表达式是否正确的软件(RegExRX)
– 此时,桌面上看到图标
– 配置字体大小:
– 配置并测试规则匹配是否正常
–如果填写错误的手机号,程序会提示错误!
–如果填写正确的手机号,程序会提示正确
–其实,程序原本不认识手机号,是程序员教程序认识的
专门描述字符串中字符出现规则的表达式。
因为程序不认识人类语言中的词汇,所以才需要程序员用正则表达式教程序认识人类语言中的词汇。程序员用正则表达式教程序认识人类语言中的词汇。
正则表达式的含义
正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。
正则表达式的用途
正则表达式可用于:– 1. 验证字符串格式;– 2. 查找敏感词(查水表)
– 比如:“我草” 第一个字我 第二个字草
“我草”分别与语句“那天,我去了她家,我说:我草!你家真大”逐字匹配
→我草 →我草→我草
那天,我
去了她家,我说:我草!你家真大
–查找一句话中是否包含敏感词“我草”
–如果将一句话中的“我草”,换成“我艹”,还能查询出来吗?
问题:第二个字符换成另一个同音字,就匹配不到了
字符集是规定一位字符上多种备选字的列表
只要规则中某一位字符上有多种备选字时,就用字符集
如何: [备选字列表]
–比如:[草艹槽]
[草艹槽]与语句“马在槽里吃草”逐字匹配
我[草艹槽] → 我草 我艹 我槽
我[草艹槽] →我槽!你家真大!
我[草艹槽] →我艹!你家真大!
◼️ 使用字符集
在RegExp Buddy中
– 定义一个规则同时匹配“我草” ,“我艹” ,“我槽” 三种敏感词
答案: 我[草艹槽] 暂时不要考虑拼音和空格!
– 扩展:修改规则,使其进一步匹配“卧槽”
答案: [我卧][草艹槽]
[我卧][草艹槽] →[卧槽] →卧槽!你家真大
– 第一位: 1
– 第二位:3、4、5、6、7、8、9中选其一
– 后9位,每一位上都是从0~9十个数字中任选其一
[3456789] 可简写为 [3-9] 读作 3到9
[0123456789] 可简写为 [0-9] 读作 0到9
–1[3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
◼️ 使用字符集简写
在RegExp Buddy中
–利用字符集简写定义手机号规则,验证手机号
答案: 1[3-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
–要匹配一位小写字母:[a-z] 共26个
–要匹配一位大写字母:[A-Z] 共26个
–要匹配一位字母: [A-Za-z] 共52个
–要匹配一位字母或数字:[0-9A-Za-z] 共62个
–要匹配一位汉字:[\u4e00-\u9fa5]
19968 ~ 40869 共20902个
“一” "龥"
◼️ 使用字符集简写
RegExp Buddy中(左上角必须选case sensitive区分大小写)
–利用字符集简写定义车牌号规则:
–第一位:1位汉字
–第二位:1位大写字母
–第三位:· (搜狗输入法打dian,按5)
–后五位,每一位:都是一位大写字母或数字
答案: [\u4e00-\u9fa5][A-Z]·[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]
– 要匹配一位数字: \d 等效于 [0-9]
– 要匹配一位字母、数字或_: \w 等效于 [0-9A-Za-z_]
– 要匹配一位空字符:\s 可匹配 空格、制表符Tab等空白
– 要匹配所有文字(通配符): .
– 1[3-9]\d\d\d\d\d\d\d\d\d
◼️ 使用预定义字符集
在RegExp Buddy中
– 利用预定义字符集简写手机号规则
答案: 1[3-9]\d\d\d\d\d\d\d\d\d
– 利用\s匹配一句英文中的每个空格
答案: \s
[\u4e00-\u9fa5][A-Z]·[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]
◼️ 使用数量词
在RegExp Buddy中
– 利用数量词进一步简写手机号规则
答案: 1[3-9]\d{9}
– 利用数量词进一步简写车牌号规则
答案: [\u4e00-\u9fa5][A-Z]·[0-9A-Z]{5}
– 1. 有明确数量边界的数量词
字符集{n} 表示字符集必须重复n次,不能多也不能少
字符集{n,m} 表示字符集至少重复n次,最多重复m次,
n<= <=m
比如: \d{4,6} 表示4到6位数字
字符集{n,} 表示字符集匹配的内容至少重复n次,多了不限
示例:有明确数量边界的数量词
\d{3} =3个\d{3,5} 3个<= <=5个\d{3,} 3个<=
– 2. 没有明确数量边界的数量词
* 可有可无,多了不限 0个<=
? 可有可无,最多一次 0个或1个
+ 至少一次,多了不限 1个<=
示例:没有明确数量边界的数量词
\s * 0个<= 的空格\s + 1个<=的空格\s? 0个或1个空格
◼️ 使用不确定数量的数量词
在RegExp Buddy中
– 匹配手机短信中的验证码:连续的4位~6位数字
– 匹配字符串中的一组连续空字符
答案: \s+
◼️ 使用选择和分组
– 匹配一个“草” 字或“cao”这个拼音
– 匹配“我草”或“我cao”
◼️ 贪婪模式与短路逻辑
([我卧]|wo)([草艹槽]|cao)
我草 ↔️ 我艹 ↔️ 我槽 ↔️ 我cao
卧草 ↔️ 卧艹 ↔️ 卧槽 ↔️ 卧cao
– 第一个字: 我 卧 wo —— ([我卧]|wo)
– 第二个字: 草 艹 槽 cao ——([草艹槽]|cao)
– 第一个字和第二个字之间有可能有空格,也可能没有空格,也可能有多个空格——\s*
([我卧]|wo)\s*([草艹槽]|cao)
– \s+ 什么防不住? 没写空格时防不住
– \s? 什么防不住? 两个以上空格防不住
– 第一个字: 我 卧 wo —— ([我卧]|wo)
– 第二个字: 草 艹 槽 cao ——([草艹槽]|cao)
– 第一个字和第二个字之间有可能有空格,也可能没有空格,也可能有多个空格——\s*
([我卧]|wo)\s*([草艹槽]|cao)\
◼️ 使用选择和分组
– 匹配“我草”
– 匹配 “卧 槽”
– 匹配 “wocao”,“我 草”等敏感词
– 定义完整手机号规则:
+86或0086
(\+86|0086) ——+是正则有功能的特殊符号,可是这里不希望+当做特殊功能使用,只当做普通字符匹配,所以用\+阻止正则解析+为数量词。
至少一个空字符 : \s+
之前所有,整体可有可无,最多一次: ()?
1
3~9 任选其一
9位数字
答案: ((\+86|0086)\s+)?1[3-9]\d{9}
– 定义完整身份证号规则:
15位数字: \d{15}
2位数字: \d\d
最后一位: 1位数字或x: [0-9x]
最后三位 可有可无,最多一次 (最后三位)?
答案:\d{15}(\d\d[0-9x])?
匹配测试字符串: 110102200012261 时,测试通过
匹配测试字符串:110102200012261251,测试通过
11010220001226125 不是合法的
– 匹配“微信”,“weixin”,“w x”等情况,并防止中间加空格
– 不用防wechat
答案:(微|w(ei)?)\s*(信|x(in)?)
分析:(微|w(ei)?)汉字微或拼音wei,但是ei可有可无,\s*可能有空格,也可能没有空 格, (信|x(in)?)汉字信或拼音xin,但是in可有可无
–1. 字符串开头
–2. 字符串结尾
–3. 英文句子中的每个单词中间的空白位置
–1. ^ 表示字符串开头
–2. $ 表示字符串结尾
–3. \b 表示单词边界,可匹配:空格,标点符号,字符串开头和结尾等可将一个单词与其它单 词分割开的符号。
–1. 匹配任意一组连续的空字符 \s+
–2. 仅匹配开头的空字符 ^\s+
–3. 仅匹配结尾的空字符 \s+$
–4. 同时匹配开头和结尾的空字符:
错误的做法: ^\s+$表示从开头到结尾之间只能是空字符 ^ …中间只能有空格… $
正确做法: ^\s+|\s+$用“|”选择符,将整个规则强行一分为2 ^\s+ ↔️ \s+$
– 一个正则,从字符串开头开始向后匹配
– 共经历过两次匹配的,发现字符串中有两组符合要求的空格
执行过程如下:
——前边紧挨着单词边界的字母
◼️ 使用特殊位置
– 仅匹配字符串开头的空字符 ^\s+
– 仅匹配字符串结尾的空字符 \s+$
– 同时匹配字符串开头和结尾的空字符 ^\s+|\s+$
– 匹配每个单词首字母 \b[a-zA-Z]
答案:\w+@\w+\.\w+(\.cn)?
分析:电子邮件的正则表达式
➡️ \w+ 1个以上的合法字符
➡️ @ 必须有一个@
➡️ \. 必须有一个.但是.是通配符,要转义为\.
➡️ \w+ .后至少有一个后缀是一个以上的合法字符
➡️ \.cn 最后的.cn可有可无。
所以完整的邮箱正则表达式是:\w+@\w+\.\w+(\.cn)?
⏬ 只要验证字符串格式或查找、屏蔽敏感词时都要用正则 ⏬
(1). 最简单的正则: 一个敏感词的原文
(2). 某一位字符上可能有多种备选字时用: [备选字列表]
(3). 如果[]中部分字符是连续的,可用: [x-x]
a. 一位小写字母: [a-z]
b. 一位大写字母: [A-Z]
c. 一位字母(大小写都行): [A-Za-z]
d. 一位字母或数字都行: [0-9A-Za-z]
e. 一位汉字: [\u4e00-\u9fa5]
(4). 预定义字符集:
a. \d 一位数字
b. \w 一位数字、字母或_
c. \s 空格、tab、换行等空字符
d. . 任意字符
(5). 如果规定一个字符集或子规则反复出现的次数时就用量词:
a. 有明确数量边界的量词:
1). {n} =n 必须n个,不能多也不能少
2). {n,m} n个<= <=m个
3). {n,} n个<= 多了不限
b. 没有明确数量边界的量词:
1). * 0个<= 可有可无,多了不限
2). ? 0个或1个 可有可无,最多一个
3). + 1个<= 至少一个,多个不限
(6). 两个规则中选其一匹配即可: 规则1|规则2
(7).希望将多个子规则分为一组先联合匹配,再和分组外的其他规则联合匹配:
(多个子规则)
(8). 匹配特殊位置: 3个
a. 字符串的开头位置: ^
b. 字符串的结尾位置: $
c. 英文句子中的单词的左右边界: \b
如果这篇【文章】有帮助到你,希望可以给【青春木鱼】点个赞,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【前端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️【青春木鱼】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】!