【正则】正则表达式总结

文章目录

  • [1 语法总结](#1 语法总结)
  • [2 常用匹配表达式](#2 常用匹配表达式)
    • [2.1 日期匹配](#2.1 日期匹配)
    • [2.2 go实现IP匹配](#2.2 go实现IP匹配)
  • Reference

1 语法总结

  1. 元字符:
    .:匹配任意单个字符(除了换行符)。
    *:匹配前面的子表达式零次或多次。
    +:匹配前面的子表达式一次或多次。
    ?:匹配前面的子表达式零次或一次。可选字符。
    {n}:匹配前面的子表达式恰好 n 次。重复出现次数。
    {n,}:匹配前面的子表达式至少 n 次。
    {n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。
    ^:匹配字符串的开始位置。
    $:匹配字符串的结束位置。
    \b:匹配一个单词的的边界。
    \B:匹配非单词边界的位置。

  2. 字符类:
    [abc]:匹配方括号中的任何一个字符。
    [^abc]:匹配不在方括号中的任何字符。
    [a-z]:匹配任何小写字母。
    [A-Z]:匹配任何大写字母。
    [0-9]:匹配任何数字。
    \d:匹配任何数字,等价于 [0-9]。
    \D:匹配任何非数字字符,等价于 [^0-9]。
    \w:匹配任何字母数字字符,等价于 [a-zA-Z0-9_]。
    \W:匹配任何非字母数字字符,等价于 [^a-zA-Z0-9_]。
    \s:匹配任何空白字符,包括空格、制表符、换页符等。
    \S:匹配任何非空白字符。

  3. 转义字符:
    \:用于转义特殊字符,例如 . 匹配实际的点字符。

  4. 分组与捕获:
    ():用于分组和捕获匹配的子串。
    (?:...):非捕获分组,只用于分组,不捕获匹配的子串。
    (?=...):正向预查,匹配后面跟随特定模式的字符串,但不包括该模式。
    (?!...):负向预查,匹配后面不跟随特定模式的字符串。

  5. 修饰符:
    g:全局搜索,匹配整个输入字符串中的所有模式。
    i:不区分大小写搜索。
    m:多行搜索,使 ^ 和 $ 分别匹配每一行的开始和结束。
    y:执行"粘性"搜索,要求匹配必须从目标字符串的当前位置开始。
    u:Unicode 模式,正确处理四个字节的 UTF-16 编码。
    s:使 . 特殊字符匹配包括 \n 在内的任意字符。

2 常用匹配表达式

2.1 日期匹配

regex 复制代码
\d{4}-\d{2}-\d{2}
2011-11-11

\d{4}-\d{2}-\d{2}
2011-11-11

\d{4}年\d{2}月\d{2}日
2011年11月11日

2.2 go实现IP匹配

go 复制代码
// 匹配
// 1.1.1.1-1.1.1.10
re1 := regexp.MustCompile(`(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})`)
// 1.1.1.1-10
re2 := regexp.MustCompile(`(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-(\d{1,3})`)
// 1.1.1.1~10
re3 := regexp.MustCompile(`(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})~(\d{1,3})`)
// 1.1.1.1/29
re4 := regexp.MustCompile(`^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/(\d{1,2}|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-3]\d{4})$`)
// 1.1.1.1
re5 := regexp.MustCompile(`^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$`)
// 1.1.1.1(xsxss)
re6 := regexp.MustCompile(`^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})((.*?)\))

// 分割
matches := re1.FindStringSubmatch("1.1.1.1-1.1.1.10")
fmt.Println(matches[0],matches[1],matches[2])   // 1.1.1.1-1.1.1.10   1.1.1.1   1.1.1.10

Reference

正则表达式30分钟入门40分钟进阶(绝对能学会):https://www.bilibili.com/video/BV19t4y1y7qP/

正则在线测试网站:https://regexr-cn.com/

相关推荐
roman_日积跬步-终至千里9 小时前
【Go语言基础【9】】字符串格式化与输入处理
golang
Kusunoki_D10 小时前
Python-正则表达式(re 模块)
python·正则表达式
数字芯片实验室11 小时前
正则表达式的前世今生
正则表达式
比特森林探险记14 小时前
Go 中的 Map 与字符处理指南
c++·算法·golang
比特森林探险记14 小时前
Go 中 map 的双值检测写法详解
java·前端·golang
哆啦A梦158815 小时前
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/[email protected] 更换为 go-ansible/@v1.1.7
开发语言·golang·ansible
LanLance15 小时前
ES101系列09 | 运维、监控与性能优化
java·运维·后端·elasticsearch·云原生·性能优化·golang
Toby_00916 小时前
tpc udp http
其他·golang
弱冠少年16 小时前
golang入门
开发语言·后端·golang
roman_日积跬步-终至千里1 天前
【Go语言基础【3】】变量、常量、值类型与引用类型
开发语言·算法·golang