正则表达式一篇就够了
TBYBlog 2021-05-06 正则
# 正则表达式
正则表达式是一种文本模式,包括普通字符(1-9、a-Z)和元字符(特殊字符)。正则表达式可以使用单个字符串来描述、匹配某个句法规则的字符串。
# 正则表达式的功能
# 效验数据有效性
- 检验手机号码
- 检验邮箱
- 检验身份证号码
# 查找符合要求的文本功能
- 查找符合某规则的号码
# 对文本进行切割,替换等操作
- 如用连续的空白符进行切割
# 元字符
- 所谓元字符就是指在正则表达式中具有特殊意义的专用字符
- 元字符是构成正则表达式的基本元件
- 正则表达式就是由一系列的元字符组成
# 特殊字符
# . 任意字符(除换行符)
- first
匹配文本 | abcde\n |
---|---|
正则表达式 | . |
匹配数量 | 7 |
匹配结果 | a、b、c、d、e、\、n |
- second
匹配文本 | abcde\nabc |
---|---|
正则表达式 | ab. |
匹配数量 | 2 |
匹配结果 | abc、abc |
- third
匹配文本 | c:\poloyy |
---|---|
正则表达式 | ..\\ |
匹配数量 | 1 |
匹配结果 | c:\ |
# \w 任意字母、数字、下划线
- first
匹配文本 | 0198aAzZ\w哎_- |
---|---|
正则表达式 | \w |
匹配数量 | 10 |
匹配结果 | 0、1、9、8、a、A、z、Z、w、_ |
- second
匹配文本 | 0198aAzZ\w哎_- |
---|---|
正则表达式 | \w.\w |
匹配数量 | 3 |
匹配结果 | 019、8aA、Z\w |
- third
匹配文本 | 0198aAzZ\w哎_- |
---|---|
正则表达式 | \w.\\w |
匹配数量 | 1 |
匹配结果 | zZ\w |
# \W 任意非字母、数字、下划线
# \d 任意数字
- first
匹配文本 | 123阿a\ |
---|---|
正则表达式 | \d |
匹配数量 | 3 |
匹配结果 | 1、2、3 |
- second
匹配文本 | 123阿a\ |
---|---|
正则表达式 | \d\w\d. |
匹配数量 | 1 |
匹配结果 | 23阿a |
# \D 任意非数字
# 空白符
# \r 回车符
# \n 换行
# \f 换页符
# \t 制表符(tab键)
# \s 任意空白符
# \S 任意非空白符
在实际使用的过程中\s已经满足了大部分场景的换行符,所以其他不用考虑即可。只需要记住\s与\S
# 量词
# * 0到多次
- first
匹配文本 | yy12菠萝 |
---|---|
正则表达式 | \w* |
匹配数量 | 1 |
匹配结果 | yy12 |
- second
匹配文本 | yy12_萝 |
---|---|
正则表达式 | .1* |
匹配数量 | 4 |
匹配结果 | y、y1、_、萝 |
- third
匹配文本 | yy_菠萝 |
---|---|
正则表达式 | \d*\w* |
匹配数量 | 1 |
匹配结果 | yy_ |
# + 1到多次
- first
匹配文本 | yy12菠萝 |
---|---|
正则表达式 | \w+ |
匹配数量 | 1 |
匹配结果 | yy12 |
- second
匹配文本 | yy11112菠萝 |
---|---|
正则表达式 | .1+ |
匹配数量 | 1 |
匹配结果 | y1111 |
- third
匹配文本 | yy_菠萝 |
---|---|
正则表达式 | \d+\w+ |
匹配数量 | 0 |
匹配结果 | \d起码需要匹配到一个数字,但是文本中没有数字 |
# ? 0到1次
- first
匹配文本 | yy12菠萝 |
---|---|
正则表达式 | \w? |
匹配数量 | 6 |
匹配结果 | y、y、1、2、空、空 |
- second
匹配文本 | yy12菠萝 |
---|---|
正则表达式 | \w? |
匹配数量 | 6 |
匹配结果 | y、y、1、2、空、空 |
- third
匹配文本 | yy12菠萝 |
---|---|
正则表达式 | \w? |
匹配数量 | 6 |
匹配结果 | y、y、1、2、空、空 |
# {n} 出现n次
- first
匹配文本 | yy12菠萝测试 |
---|---|
正则表达式 | y{2}\d{1}\w.{2} |
匹配数量 | 1 |
匹配结果 | yy12菠萝 |
- second
匹配文本 | 13027608010 |
---|---|
正则表达式 | ^130\d{8}$ |
匹配数量 | 1 |
匹配结果 | 13027608010 |
- third
匹配文本 | 023-81200222、023-81200221、023-81200220 |
---|---|
正则表达式 | 0\d{2}-\d{8} |
匹配数量 | 3 |
匹配结果 | 023-81200222 023-81200221 023-81200220 |
# {n,} 出现最少n次
- first
匹配文本 | poloyy |
---|---|
正则表达式 | y{1,} |
匹配数量 | 1 |
匹配结果 | yy |
- second
匹配文本 | 13027608010 |
---|---|
正则表达式 | ^130\d{1,}$ |
匹配数量 | 1 |
匹配结果 | 13027608010 |
- third
匹配文本 | 023-81200222、023-81200221、023-81200220 |
---|---|
正则表达式 | 0\d{1,}-\d{1,} |
匹配数量 | 3 |
匹配结果 | 023-81200222 023-81200221 023-81200220 |
# {n,m} 出现n到m次
- first
匹配文本 | poloyy菠萝 |
---|---|
正则表达式 | yy菠1{0,1} |
匹配数量 | 1 |
匹配结果 | yy菠 |
- second
匹配文本 | 13027608010 |
---|---|
正则表达式 | ^130\d{1,8}$ |
匹配数量 | 1 |
匹配结果 | 13027608010 |
- third
匹配文本 | 023-81200222、023-81200221、023-81200220 |
---|---|
正则表达式 | 0\d{1,2}-\d{1,8} |
匹配数量 | 3 |
匹配结果 | 023-81200222 023-81200221 023-81200220 |
# 范围
# | 或。 如:ab|bc 代表ab或bc
# [多个普通字符] 多选一。 匹配括号中任意单个元素
[]里面写再多的字符集合,最终只会匹配一个字符,和元字符一样,如果需要重复匹配需要加上限定符
first
- 正则表达式:\(?0\d{2}[)-]?\d{8}\
- 可以匹配到字符串
- (010)88886666
- 010-88886666
- 01088886666
second
- 正则表达式:[123aA;]
- 可以匹配到字符串
- 只能匹配到[]里面的一个字符
# [a-z] 匹配a-z之间任意单个元素(按照ASCII,包含a、z)
# 
- first
- 正则表达式:[\u4e00-\u9fa5]
- 可以匹配到字符串
- 任意中文
- second
- 正则表达式:^\d[a-gA-Z5-9]{2,4}
- 分析
- 数字开头
- a-g或A-Z或5-9任取2-4位
- 可以匹配到字符串
- 6aY
- 6aY7
- 6aY78
# [^多个普通字符] 取反,不能是括号中的任意字符
- first
- 正则表达式:[^abcdA-Z-=]
- 分析
- 可以匹配非a、b、c、d、A-Z、(、)、-、= 以外的字符
- 可匹配到的字符串
- e
- f
- \
- [
# 断言
# \b 单词的开头或结束
- first
匹配文本 | poloyy |
---|---|
正则表达式 | \bpoloyy\b |
匹配数量 | 1 |
匹配结果 | poloyy |
- second
匹配文本 | poloyy |
---|---|
正则表达式 | \bpo |
匹配数量 | 1 |
匹配结果 | poloyy |
- third
匹配文本 | poloyy1 |
---|---|
正则表达式 | \bpo....\d\b |
匹配数量 | 1 |
匹配结果 | poloyy1 |
- four
匹配文本 | y1菠萝_A |
---|---|
正则表达式 | \b\w. |
匹配数量 | 2 |
匹配结果 | y1、_A |
- \b其实不匹配任何字符,它只匹配位置(开头,结尾)
- 相当于单词的开头或结尾,有点类似^、$
- 单词:连起来的字母、数字、下划线,但不包括汉字(如four)的例子,一般可以用元字符\w表示
# \B 和\b相反
# ^ 匹配字符串(行)的开头
- first
匹配文本 | 菠萝_A |
---|---|
正则表达式 | ^菠. |
匹配数量 | 1 |
匹配结果 | 菠萝 |
- second
匹配文本 | _123 |
---|---|
正则表达式 | ^_\d |
匹配数量 | 1 |
匹配结果 | _1 |
^和\b不一样,^是匹配行开始的任意字符,可以包括汉字
# $ 匹配字符串(行)的结尾
- first
匹配文本 | 菠2萝_ |
---|---|
正则表达式 | \d._$ |
匹配数量 | 1 |
匹配结果 | 2萝_ |
- second
匹配文本 | 123菠萝 |
---|---|
正则表达式 | \b\w\d\d菠萝$ |
匹配数量 | 1 |
匹配结果 | 123菠萝 |
$和\b不一样,$是匹配行结束的任意字符,可以包括汉字