正则表达式学习
2022-04-28 本文已影响0人
叶落清秋
1. 基础语法
-
.
- 除换行符以外的所有字符。 -
^
- 字符串开头。 -
$
- 字符串结尾。 -
\d
,\w
,\s
- 匹配数字、字符、空格。 -
\D
,\W
,\S
- 匹配非数字、非字符、非空格。 -
[abc]
- 匹配 a、b 或 c 中的一个字母。 -
[a-z]
- 匹配 a 到 z 中的一个字母。 -
[^abc]
- 匹配除了 a、b 或 c 中的其他字母。 -
aa|bb
- 匹配 aa 或 bb。 -
{n}
- 匹配 n次。 -
{n,}
- 匹配 n次以上 -
{m,n}
- 最少 m次,最多n次匹配 -
?
- 0 次或 1 次匹配 等价于{0,1}
-
*
- 匹配 0 次或多次 等价于{0,}
-
+
- 匹配 1 次或多次 等价于{1,}
-
(expr)
- 捕获expr子模式,以\1
使用它。
ps:
{n}
、{n,}
、{m,n}
、?
、*
、+
只匹配前一个字符
abc+
: 匹配 abc、abcc、 abccc等
a[bc]+
: 匹配ab、ac、abb、abc、acb等
a(bc)+
: 匹配abc、abcbc、abcbcbc等
a|b|c+
: 注意这个+与c绑定,实际匹配的是a、b、c、cc、ccc、cccc等
^abc
: 匹配以abc开头的字符串
.
: 对应除换行符以外的所有字符,但只对应一个字符,.+
匹配除换行符以外的所有字符
2. 括号的用法
()
是组,可以是表达式
--() 匹配的是组,可以是多个字符,匹配保存结果,即产生数组保存对应的对个值,可以使用$1获取第一个匹配值
(abc| bac| cba) 匹配abc或bac或cba,顺序固定
-- (?)以?开头的为非获取匹配,只匹配不保存结果,即不产生数组
tr(?=y|ies|ying|ied) 该方式等同于try|tries|trying|tried
a(?=bc) 匹配以abc顺序出现的a (?<=bc)a 前置匹配,匹配以bca顺序出现的a
a(?!bc) 匹配不以abc顺序出现的a 如:ac中的a (?<!bc)a 前置匹配,匹配不以bca顺序出现的a 如:ca中的a
[]
是定义匹配的字符范围
-- [] 匹配单个字符
[1-9] 匹配1到9的数字
[135] 匹配1、3、5中的数字
[?*+(a)] 注意,[]中特殊字符不需要转义即可使用,这里匹配?、*、+、(、a、)中的任一字符,并不是表达式
[]中有用的符号为:
1. ^ 取反 ^a即除a以外的字符
2. - 区间 a-z即 a到z的字母
3. \ 匹配特殊字符: 换行(\n) 中文(\u4e00-\u9fa5)等
{}
用来匹配的长度
{n} - 匹配 n次。
{n,} - 匹配 n次以上
{m,n} - 最少 m次,最多n次匹配
3. 优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似
运算符 | 描述 |
---|---|
\ | 转义符 |
(), (?:), (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 |
4.修饰符
通常使用g
即/[1-9]/g
修饰符 | 含义 | 描述 |
---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
s | 特殊字符圆点 . 中包含换行符 \n | 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。 |
5. 非贪婪
*和 +限定符都是贪婪的,它们会尽可能多的匹配文字。但是加上?将变成非贪婪表达式、最小匹配
<span> hello </span>
<.*> 匹配<span> hello </span>
<.*?> 匹配<span>