概述
- 正则表达式包括
普通字符
(例如 a 到 z 、0 到 9、标点符号等的所有非元字符)和特殊字符
(元字符
) - 正则表达式
描述、匹配
一系列符合某个句法规则
的字符/字符串
- 加转义符号
\
把元字符变为普通字符
例如:
今天天气真+好
,匹配今天天气真好
、今天天气真好好
、今天天气真好坏好
等,+
为元字符,代表前面的字符串必须至少出现一次(1次或多次)。今天天气真*好
,匹配今天真好
、今天天气真好
等,*
代表前面的字符串可以不出现,也可以出现任意次(0次、1次或多次)。colou?r
,匹配color
或colour
等,? 代表前面的字符串最多出现一次(0次或1次)。
元字符
符号 | 匹配的字符 |
---|---|
[ABC] | 字符A、B、C |
[^ABC] | 非A、B、C |
[A-Z] | 区间A到Z内的字符 |
[A-Za-z0-9_] | 3个区间加一个下划线之内的字符 |
. | 除换行符外的所有字符。等价于[^\n\r] |
\s | 所有空白符(非打印字符) |
\S | 非空白符 |
[\s\S] | 所有字符 |
\w | 字母数字下划线。等价于 [A-Za-z0-9_] |
\b | 单词边界,即单词与空格连接处。例如,er\b 匹配 never 的 er,不匹配 verb 的 er |
\B | 非单词边界。er\B 匹配 verb 的 er,不匹配 never 的 er |
{n} | n 为非负整数,匹配确定的 n 次。o{2} 不匹配Bob 中的 o,匹配 food 中的 oo |
{n,} | n 为非负整数,至少匹配 n 次 |
{n,m} | n,m 为非负整数。n<=m:至少匹配 n 次,至多匹配 m 次 |
修饰符(标记)
位于正则表达式外
格式:/pattern/flags
例:/正则表达式/g
表示查找字符串中所有的匹配项。
修饰符 | 含义 | 描述 |
---|---|---|
i | ignore | 不区分大小写 |
g | global | 全局匹配 |
m | multiline | 多行匹配,使边界字符^和$匹配每一行的开头和结尾 |
s | 使特殊字符.包含换行符 |
实例
/\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b
/g
匹配字符串 “abcd test@email.com 1234”
中的网址:”test@email.com“
优先级
优先级 | 运算符 | 描述 |
---|---|---|
0 | | 转义符 | |
1 | ( ) , [ ] | 圆括号和方括号 |
2 | * , + , ? , {n} , {n,} , {n,m} | 限定符 |
3 | ^ , $ , 任何字符 | 位置和顺序 |
匹配规则
①基本模式匹配
模式
,一组描述字符串特征
的字符
,是正则表达式最基本的元素
例如:模式^once
包含一个元字符^
,表示该模式只匹配以once
开头的字符串。
该模式与字符串once upon a time
匹配,与There once was a man
不匹配。
②字符簇
字符簇
是一种更自由地描述模式的方法。
- 例1,
[AaEeIiOoUu]
是一个表示所有元音字符的字符簇。 - 例2,用模式
^[a-z][0-9]$
匹配z2
、t6
或g7
,而不是ab2
、r2d3
或b52
。 - 例3,模式
^.5$
与任何两个字符的
、以数字5结尾
和以非"换行"字符开头
的字符串匹配。
③确定重复出现
- 元字符
?
与{0,1}
是相等的,它们都代表0个或1个前面的内容
或前面的内容是可选的
*
与{0,}
是相等的,都代表0 个或多个前面的内容
+
与{1,}
是相等的,表示1 个或多个前面的内容