编辑
2021-04-30
开发
00
请注意,本文编写于 1483 天前,最后修改于 971 天前,其中某些信息可能已经过时。

目录

正则表达式是什么
举例
元字符
转义
重复
字符
分支条件
分组
反义
反向引用
分组的其他语法
捕获
零宽断言
注释
零宽断言
负向零宽断言
注释
贪婪与懒惰
处理选项
平衡组和递归匹配 - .net支持
编辑器中的正则表达式

正则表达式是什么

正则表达式是用来匹配字符串的规则的代码

举例

匹配IP地址

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

匹配手机号

^1[35]([1-3][0-9]|4[0-5])(0[1-9]|1[0-9])\d{5}$

元字符

符号说明
.匹配除换行符以外的任意字符
\w匹配字母、数字、下划线或汉字
\s匹配任意空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

转义

使用“\”符号进行转义

\\ 转义\ \. 转义.

重复

符号说明
*零次或多次
+一次或多次
?零次或一次
{n}n次
{n,}n次或更多次
{n,m}n-m次

字符

[0-9] [0-9a-z]

分支条件

符号:| 举例:(0\d{2}-\d{8})|(0\d{3}-\d{8}) 匹配:021-85232122 0551-82918821

分组

()

反义

符号说明
\W匹配不是字母、数字、下划线或汉字
\S匹配不是空白符的字符
\D匹配不是数字的字符
\B匹配不是单词开头或者结束的位置
[^x]匹配除了x以外的字符
[^aoeiu]匹配除了aoeiu以外的字符

反向引用

使用数字索引从1开始索引 \b(\w+)\b\s+\1\b

使用别名 \b(?\w+)\b\s+\k\b

分组的其他语法

捕获

符号说明
(exp)匹配exp,并捕获文本到自动命名的组里
(?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言

符号说明
(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置

注释

(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

零宽断言

\b\w+(?=ing\b)

((?<=\d)\d{3})+\b

(?<=<(\w+)>).*(?=</\1>)

负向零宽断言

\b\wq[^u\s]\w\b

\b\wq(?!u)\w\b (?<![a-z])\d{7}

注释

2[0-4]\d(?#200-249)|250-5|[01]?\d\d?(?#0-199)

(?<= # 断言要匹配的文本的前缀 <(\w+)> # 查找尖括号括起来的字母或数字(即HTML/XML标签) ) # 前缀结束 .* # 匹配任意文本 (?= # 断言要匹配的文本的后缀 <\/\1> # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签 ) # 后缀结束

贪婪与懒惰

a.b a.?b

*? 重复任意次,但尽可能少重复 +? 重复1次或更多次,但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n到m次,但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复

处理选项

/g 全局搜索 /i 忽略大小写 /m 执行多行匹配

平衡组和递归匹配 - .net支持

<div[^>]>[^<>](((?'Open'<div[^>]>)[^<>])+((?'-Open')[^<>])+)(?(Open)(?!))

编辑器中的正则表达式

QQ截图20220923102700.png

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:谭三皮

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!