基本正则表达式
正则表达式在线测试https://c.runoob.com/front-end/854/
一、基本规则
1. 基本匹配
正则表达式最基本的形式是一个由字母和数字组成的序列。这个序列可以精确匹配文本中的内容。
表达式 | 描述 |
---|---|
abc | 精确匹配 ‘abc’ |
2. 量词
量词定义了一个模式应该出现的次数。
表达式 | 描述 |
---|---|
* | 匹配前面的模式零次或多次 |
+ | 匹配前面的模式一次或多次 |
? | 匹配前面的模式零次或一次 |
{n} | 匹配前面的模式 n 次 |
{n,} | 匹配前面的模式至少 n 次 |
{n,m} | 匹配前面的模式至少 n 次,但不超过 m 次 |
*
和+
限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?
就可以实现非贪婪或最小匹配。
3. 字符类
字符类允许我们定义一个字符集合,然后匹配其中任何一个字符。
表达式 | 描述 |
---|---|
[abc] | 匹配 ‘a’、’b’ 或 ‘c’ |
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
[0-9] | 匹配任何数字 |
4. 特殊字符
含有特殊含义的字符
表达式 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\‘ 匹配 “” 而 “(“ 则匹配 “(“。 |
. | 匹配任何单个字符(除了换行符\n) |
\w | 匹配任何单词字符(等同于 [a-zA-Z0-9_]) |
\W | 匹配任何非单词字符 |
\d | 匹配任何数字字符(等同于 [0-9]) |
\D | 匹配任何非数字字符 |
\s | 匹配任何空白字符 |
\S | 匹配任何非空白字符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
^ | 匹配输入字符串开始的位置 |
$ | 匹配输入字符串结尾的位置 |
\b | 匹配一个单词边界,即字与空格间的位置 |
\B | 匹配一个非单词边界 |
5. 分组
在正则表达式中,括号 () 用于创建一个分组。分组有两个主要的用途:
捕获分组 :括号中的表达式会作为一个单独的单元进行匹配,然后将匹配的内容保存起来以供后续使用。例如,表达式 (abc) 会匹配文本中的 ‘abc’,并将其保存为一个分组。
量词应用:括号还可以让我们对一组字符应用量词。例如,表达式 (abc){2} 会匹配 ‘abcabc’,因为 {2} 量词应用于整个 ‘abc’ 分组,表示这个分组需要连续匹配两次。
以下是一些使用括号的例子:
(abc):匹配并捕获 ‘abc’。
a(bc):匹配并捕获 ‘bc’,前面有 ‘a’。
(a|b)c:匹配 ‘ac’ 或 ‘bc’。
在正则表达式中,你可以通过反向引用来使用捕获到的内容。反向引用使用反斜杠 \ 加上一个数字来表示,例如 \1、\2 等。
这个数字表示的是捕获组的编号。捕获组的编号是根据左括号 ( 出现的顺序来确定的,从 1 开始计数。例如,在表达式 (a)(b)(c)
中,a 是第 1 组,b 是第 2 组,c 是第 3 组。
以下是一些使用反向引用的例子:
(a)\1:匹配 ‘aa’。\1 是对第一组的引用,表示和第一组匹配的相同内容,也就是 ‘a’。
(a)(b)\2\1:匹配 ‘abba’。\2 是对第二组的引用,表示 ‘b’,\1 是对第一组的引用,表示 ‘a’。
二、修饰符
标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里,标记位于表达式之外,格式如
1 | /pattern/flags |
修饰符 | 含义 | 描述 |
---|---|---|
i | ignore - 不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写,如 A 和 a 没有区别。 |
g | global - 全局匹配 | 查找所有的匹配项。 |
m | multi line - 多行匹配 | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。 |
s | 特殊字符圆点 . 中包含换行符 \n | 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。 |
三、优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。
运算符 | 描述 |
---|---|
\ | 转义符 |
(), (?:) , (?=), [] |
圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | 替换,”或”操作 字符具有高于替换运算符的优先级,使得”m|food”匹配”m”或”food”。若要匹配”mood”或”food”,请使用括号创建子表达式,从而产生”(m|f)ood”。 |