正则表达式完全指南,总结全面通俗易懂

目录

元字符

连接符

限定符

定位符

修饰符(标记)

运算符优先级

普通字符集及其替换

零宽断言

正向先行断言

负向先行断言

正向后发断言

负向后发断言


正则表达式在线测试: 正则在线测试工具

元字符

字符 描述
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
. 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式。
[ ] 字符种类。匹配方括号内的任意字符。
[^ ] 否定的字符种类。匹配除了方括号里的任意字符

连接符

字符 描述
[0-9] 匹配数字,等价于\d
[a-z] 匹配英文小写字母
[A-Z] 匹配英文大写字母
[0-9a-zA-z] 匹配数字或英文字母
[\u4e00-\u9fa5] 匹配一个汉字

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

正则表达式的限定符有:

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于 {0,}。
+ 匹配前面的子表达式一次或多次。例如,zo+ 能匹配 "zo" 以及 "zoo" ,但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 "do""does""doxy" 中的 "do""does"。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,o{2} 不能匹配 "Bob" 中的 o ,但是能匹配 "food" 中的两个 o
{n,} n 是一个非负整数。至少匹配n 次。例如,o{2,} 不能匹配 "Bob" 中的 o ,但能匹配 "foooood" 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*。
{n,m} m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 "fooooood" 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。

定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

正则表达式的定位符有:

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个单词边界,即字与空格间的位置。
\B 非单词边界匹配。

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。

修饰符(标记)

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。

标记不写在正则表达式里,标记位于表达式之外,格式如下:

修饰符 含义 描述
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"。

普通字符集及其替换

符号 替换正则 描述
\d [0-9] 匹配数字字符
\D [^0-9] 匹配非数字字符
\w 0-9a-zA-z] 匹配数字或字母或下划线
\W [^\w] 匹配非数字或字母或下划线
\s [\r\t\n\f] 匹配任意的空白符,如空格,换行符,制表符等
\S [^\s] 匹配任意不是空白符的字符

零宽断言

  • 所谓断言,是用来声明一个应该为真的事实。在正则表达式中,只有当断言为真时才会继续进行匹配。
  • 零宽断言:像用于查找某些内容之前或者之后的东西,其中一些特殊字符如"\b、^、$"等用于指定一个位置,这个位置应满足一定的条件。

正向先行断言

(?=pattern) 匹配 pattern 之前的位置,即:要想满足匹配,后面得跟着 pattern

负向先行断言

(?!pattern) 匹配 pattern 之前的位置,即:要想满足匹配,后面不能跟着 pattern

正向后发断言

(?<=pattern) 匹配 pattern 之后的位置,即:要想满足匹配,前面得跟着 pattern

负向后发断言

(?<!pattern) 匹配 pattern 之后的位置,即:要想满足匹配,前面不能跟着 pattern

规律 所谓"正",即字符中需要出现 pattern ;所谓"负",即字符中不能出现 pattern ; 所谓"先",即匹配在 pattern 前的位置 ; 所谓"后",即匹配在 pattern 后的位置;

相关推荐
壹号用户16 小时前
python学习之正则表达式
python·学习·正则表达式
xiaozaq1 天前
java 正则表达式 所有的优先级
java·开发语言·正则表达式
ColderYY1 天前
Python中的正则表达式
开发语言·python·正则表达式
李宥小哥1 天前
正则表达式详解
正则表达式
珊瑚礁的猪猪侠4 天前
正则表达式入门到精通教程(Linux实操版)
linux·人工智能·正则表达式
!win !5 天前
分享二个实用正则
javascript·正则表达式
xw55 天前
分享二个实用正则
javascript·正则表达式
刺客-Andy6 天前
Python 第二十节 正则表达式使用详解及注意事项
python·mysql·正则表达式
好好好起个名真难6 天前
正则表达式
正则表达式
坚持就完事了7 天前
正则表达式与Python的re模块
python·正则表达式