注意 本文√表示有匹配结果,×表示无结果
正则表达式
正则表达式(Regular Expression)是一种特殊的文本格式,常用于匹配有某种句法规律的字符串,或从大量数据中找出特定语法数据。正则表达式功能强大,可以提高编程效率,且对于特定需求能提供更多解决方法。
基础语法
在/和/g中间写入字符就构成最基础的正则表达式。如:
/JavaScript/g
可以匹配所有带JavaScript的字符串
JavaScript es6 √
JavaScript √
js ×
练习题(写出正则表达式对答案)
匹配所有带有python的字符串
python3 √
learn python √
pyton ×
练习题可在 https://regexr-cn.com/验证
字符匹配
[]中填入字符可以匹配对应单个字符。如:
/[Cc]ode/g // 匹配带有Code或者code的字符串
Codesdada √
codetaioth √
Cras ×
练习题(写出正则表达式对答案)
匹配所有带有JavaScript和javaScript的字符串
JavaScript ES6 √
html javaScript css √
javascript ×
连字符
[] 搭配 - 表示一个区间,匹配这个区间的数据。如:
/[0-9]/g // 表示匹配带数字的字符串
459dawr √
rawr ×
/[0-9A-Za-z]/g // 表示匹配带 0-9 A-Z a-z的字符串
练习题(写出正则表达式对答案)
匹配所有带有大小写字母的字符串
adcef √
45Ihi √
##4548 ×
取反
[] 搭配 ^ 表示取反,匹配相反结果。如:
/[^0-9]/g // 表示匹配非全数字的字符串
4897 ×
dawr125 √
iohio √
练习题(写出正则表达式对答案)
匹配出除‘怎么全是homo喜’外的字符串
怎么全是homo恼 √
怎么全是homo喜 ×
转义字符
有一些字符是无法直接匹配的,这时候就需要转义字符 \ 。
\f 匹配换页符
\n 匹配换行符
\s 匹配空白字符
\t 匹配一个制表符
等等
快捷匹配
\w 与非特殊单词字符匹配,即匹配大小字母、数字和_。
\d 与任意数字匹配
\W 与特殊单子字符匹配
\D 与非数字匹配
/\w/g
dw78971 √
?$% ×
/[\w]/g // 相当于[A-Za-z0-9_]
练习题(写出正则表达式对答案)
匹配所有非数字字符串
8979 ×
regular √
?%# √
单词边界
用两个 \b 围起来称作一个边界,边界只匹配被隔出来的字符。如:
/\bcode\b/g //
codesdsa ×
code-sdsa √
dd,code,h √
开始和结束
开始(^)和结束($),可用于更准确的匹配。如:
/code$/g // 匹配以code结尾的字符串
code √
dwacode √
dwacodedwa ×
/^code$/g // 全匹配code字符串
code √
scodes ×
注意 没加开始和结束的正则表达式,在字符串中任意位置满足语法即匹配。
练习题(写出正则表达式对答案)
匹配所有以CSDN结尾的字符串
hdiaCSDN √
CSDNdwe ×
CSDNbad ×
任意字符
. 表示匹配除换行符外任何单个字符
可选字符
? 表示其前一个字符出现零次或一次,如:
/codes?/g // 匹配带code或codes的字符串
重复
{N} 可表示其之前的字符出现N次
{N,M} 可表示其之前的字符出现最少N次最多M次,如:
/\d{2}/g // 表示每次匹配2个数字
/^\d{3,4}-\d{8}$/g // 全匹配
023-98741354 √
0124-64872141 √
重复还有两个速写符号。
+ 表示匹配1-无数个
* 表示匹配0-无数个
/^python\d*$/g
python √
python3 √
pythons ×
练习题(写出正则表达式对答案)
匹配手机号码(总共11位,第一位数字必须以1开头,第二位数字可以是[3,4,5,7,8]中的任意一个)
15678945612 √
19465789123 ×
34781566782 ×
13768489113 √
134794878916 ×
匹配邮箱(@前面可用大小字母、数字和_,@后面可用大小字母和数字)
4896@163.com √
nami@kkang.edu √
rjaiowr?48@qq.com ×
总结
练习题有多种解法,可以多想几种出来,熟悉正则表达式语法。
至此,正则表达式基础语法已完,使用这些语法就能完成编程过程中绝多数字符串匹配问题,后续进阶篇看个人需求。
进阶篇连接 https://blog.csdn.net/qq_30258721/article/details/126213016