正则表达式小点
1、表示一个反斜杠 '\',需要四个反斜杠来转义,即 '\\\\';头两个是转义出 \ ,并作为转义字符,后两个也是转义 \ ,作为 \ 本身的字符。
2、\num,官方定义:匹配 num,其中 num 是一个正整数,对所获取的匹配的引用。这里,\num 对应的时前面的第几个括号,若num的值大于括号的个数,则会出错。例如:
/(3)\1/ 匹配连续的两个3
/(3)\1\1/ 匹配连续的三个3
/(3)\2/ 出错
/(3)(4)\1/ 匹配连续的两个4,343
/(3)(4)\2/ 匹配连续的两个4,344
/(3)(4)\1\2/ 匹配连续的两个3和两个4,3434
/(3)(4)\1\2\3/ 出错
3、\xn、\n 对应的是十六进制和八进制的ascii码
4、\nm 若是匹配这种情况: \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。即:/(3)\1a/ 匹配 33a
5、贪婪模式和非贪婪模式:正则匹配是贪婪模式的,即尽可能趋向于最大长度匹配;非贪婪模式则是只要匹配到即可,不须全部最大。通过在限定符后面加上 ? 即可变成非贪婪,限定符有(*、+、?、{n,}、{n,m})。
6、括号副作用:用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。
例如:/j(w)/,会缓存 w 字符,在用php的 preg_match_all 时数组会有两个值 array(2) { [0]=> array(1) { [0]=> string(2) "jw" } [1]=> array(1) { [0]=> string(1) "w" }};如果添加 ?: 则会消除缓存,得到 array(1) { [0]=> array(1) { [0]=> string(2) "jw" }}
7、反向引用:对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存 储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。这是对上面 2 的说明。
8、正向预查和反向预查:/j(?=w)/ 和 /j(?!w)/,最终只匹配显示 j,只是帮你过滤掉符合 = 和 !的字符串,而不会把 w 也添加进去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现