正则表达式的学习

常用的源字符

实际上.这个元字符是不会匹配换行符的,所以不仅仅是\n

() [] {}三种括号的作用

()的作用是分组,或者是匹配()中的所有字符,其实就是和数学上的小括号的作用一致,将多个单个字符捆绑起来使得其变成一个字符。

[]的作用是字符种类。匹配方括号内的任意字符。

{}的作用是字符出现的次数,{n,m}匹配num个大括号之前的字符或字符集 (n <= num <= m).

字符集

上面提到了[]可以包括一个字符集,使得正则表达式会去匹配其中的任意字符。

如:

1
[Tt]est 就会匹配 Test 和 test

方括号的句号就表示句号。 表达式 ar[.] 匹配 ar.字符串

    "ar[.]" => A garage is a good place to park a car.

否定字符集

[]中使用^就变成了否定的意思。

    "[^c]ar" => The car parked in the garage.

重复次数

匹配前面的字符重复的次数

符号 作用
+ 等价于>=1,出现过1次以上
* 等价于>=0,出现过0次以上
? 出现过1次或者是0次

{}号

前面我们大致了解了{}的作用。下面举几个例子

在正则表达式中 {} 是一个量词,常用来限定一个或一组字符可以重复出现的次数。 例如, 表达式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字。

我们可以省略第二个参数。 例如,[0-9]{2,} 匹配至少两位 0~9 的数字。

    "[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.

在线练习

如果逗号也省略掉则表示重复固定的次数。 例如,[0-9]{3} 匹配3位数字

    "[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.

()号

和数学上的()的作用是差不多的。特征标群是一组写在 (...) 中的子模式。(...) 中包含的内容将会被看成一个整体,和数学中小括号()的作用相同。例如, 表达式 (ab)* 匹配连续出现 0 或更多个 ab。如果没有使用 (...) ,那么表达式 ab* 将匹配连续出现 0 或更多个 b 。再比如之前说的 {} 是用来表示前面一个字符出现指定次数。但如果在 {} 前加上特征标群 (...) 则表示整个标群内的字符重复 N 次。

我们还可以在 () 中用或字符 | 表示或。例如,(c|g|p)ar 匹配 cargarpar.

可以使用\num来表示一个()所匹配的字符

零宽度断言

先行断言和后发断言(合称 lookaround)都属于非捕获组(用于匹配模式,但不包括在匹配列表中)。当我们需要一个模式的前面或后面有另一个特定的模式时,就可以使用它们。

符号 描述
?= 正先行断言-存在
?! 负先行断言-排除
?<= 正后发断言-存在
?<! 负后发断言-排除

?=正先行断言

起作用就是:

“(T|t)he(?=\sfat)” => The fat cat sat on the mat.


正则表达式的学习
https://ysc2.github.io/ysc2.github.io/2024/02/05/正则表达式的学习/
作者
Ysc
发布于
2024年2月5日
许可协议