基本正则表达式

基本正则表达式

正则表达式在线测试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’。

二、修饰符

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里,标记位于表达式之外,格式如

language-bash
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”。