目录
前言
介绍正则表达式,分类整理,递进展示。
一、简介
正则表达式是表示搜索模式的字符串,常缩写成 Regex 或 Regexp。它常用于查找和替换文本中的字词。此外,我们可以测试文本是否符合我们设置的规则。
二、开始学习
1.基本匹配方法
类型 | 标准示例 | 匹配内容 / 解释 |
基本匹配 | regexp | 匹配 regexp |
点号 | . | 匹配所有字符 |
字符集 | [aeiou] | 匹配a,e,i,o,u中任意一个字符 |
否定字符集 | [^aeiou] | a,e,i,o,u中任意一个字符,都不能匹配 |
字母范围 | [a-z] | 匹配a到z,26个字符中的任意一个字符 |
数字范围 | [0-9] | 匹配0到9,10个数字中的任意一个数字 |
小结:
点号,[],^,以及表示范围时用到的中横线 -,须熟记其含义!
2.重复/数量
类型 | 标准示例 | 匹配内容 / 解释 |
星号,* | * | 0次或者多次 |
加号,+ | + | 1次或者多次 |
问号,? | ? | 0次或者1次 |
大括号,{},固定次数 | {2} | 2次 |
大括号,{},次数范围 | {2,} | 至少2次 |
大括号,{},次数范围 | {2,5} | 2次至5次 |
3.特殊字符
类型 | 标准示例 | 匹配内容 / 解释 |
分组,() | (abc) | ()将abc划成一个分组,方便引用 |
引用组,\1 | (ha)-\1,(haa)-\2 | 匹配内容:ha-ha,haa-haa \1引用第一个分组ha, \2引用第二个分组haa, 引用避免重复书写! |
非捕获分组,(?:) | (?:ha)-ha,(haa)-\1 | (?:)表示该分组不被引用, 故\1引用的分组是haa, 匹配内容:ha-ha,haa-haa |
竖线,| | (c|r)at|dog | |为表达式提供分支功能, 你可以理解为“或”, 匹配内容:cat 或 rat 或 dog |
转义字符,\ | \ | 存在特殊功能的字符, 因为它已经代表一种含义, 此时如果实际上想匹配的, 是这一类字符,需要使用转义字符:\ |
插入符,^ | ^a | 匹配开头字符, ^,提示其后的字符, 与待匹配内容的开头字符进行匹配 |
美元符号,$ | a$ | 匹配结尾字符, $,提示其前的字符, 与待匹配内容的结尾字符进行匹配 |
单词字符,\w | \w | 字母,数字,下划线_ |
非单词字符,\W | \W | 不是字母,数字,下划线_ |
数字字符,\d | \d | 0至9的数字 |
非数字字符,\D | \D | 不是0至9的数字 |
空白符,\s | \s | 空格符,制表符,换行符 |
非空白符,\S | \S | 不是空格符,制表符,换行符 |
小结:
颜色标记的类别,是常用的类型,多用多熟练;
分组符号 () 的优先级高,该符号先生效,其他符号再生效;举个例子如下:
^(abc),匹配以abc开头的字符串内容;
4.更精准的匹配——位置断言
类型 | 标准示例 | 匹配内容 / 解释 |
正向先行断言,(?=) | \d(?=flag) | 只要是flag前面紧挨的第一个数字,都匹配 |
负向先行断言,(?!) | \d(?!flag) | 只要不是flag前面紧挨的第一个数字,都匹配 |
正向后行断言,(?<=) | (?<=flag)\d | 只要是flag后面紧挨的第一个数字,都匹配 |
负向后行断言,(?<!) | (?<!flag)\d | 只要不是flag后面紧挨的第一个数字,都匹配 |
小结:
上述示例中,\d为匹配模式,匹配词是一个数字;
除去语法部分,单词flag,为标记词;
正向表示,这种情况都匹配;
负向表示,除了这种情况都匹配;
先行表示匹配词先于标记词出现;
后行表示匹配词后于标记词出现;
先行和后行,匹配词在标记词的前后位置;
以下图示为测试效果(测试地址:https://www.sojson.com/regex/check.html):
第一类:正向先行
第二类:负向先行
第三类:正向后行
第四类:负向后行
5.三种标记
全局标记,g;
多行标记,m;
忽略大小写标记,i;
6.其他
贪婪匹配,正则表达式默认进行贪婪匹配,即匹配的长度尽可能长;
懒惰匹配,加?;
总结
正则表达式,多练习,总结归类。