1 语法总结
-
元字符:
.
:匹配任意单个字符(除了换行符)。
*
:匹配前面的子表达式零次或多次。
+
:匹配前面的子表达式一次或多次。
?
:匹配前面的子表达式零次或一次。可选字符。
{n}
:匹配前面的子表达式恰好 n 次。重复出现次数。
{n,}
:匹配前面的子表达式至少 n 次。
{n,m}
:匹配前面的子表达式至少 n 次,但不超过 m 次。
^
:匹配字符串的开始位置。
$
:匹配字符串的结束位置。
\b
:匹配一个单词的的边界。
\B
:匹配非单词边界的位置。 -
字符类:
[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
:匹配任何非空白字符。 -
转义字符:
\
:用于转义特殊字符,例如 . 匹配实际的点字符。 -
分组与捕获:
()
:用于分组和捕获匹配的子串。
(?:...)
:非捕获分组,只用于分组,不捕获匹配的子串。
(?=...)
:正向预查,匹配后面跟随特定模式的字符串,但不包括该模式。
(?!...)
:负向预查,匹配后面不跟随特定模式的字符串。 -
修饰符:
g
:全局搜索,匹配整个输入字符串中的所有模式。
i
:不区分大小写搜索。
m
:多行搜索,使 ^ 和 $ 分别匹配每一行的开始和结束。
y
:执行“粘性”搜索,要求匹配必须从目标字符串的当前位置开始。
u
:Unicode 模式,正确处理四个字节的 UTF-16 编码。
s
:使 . 特殊字符匹配包括 \n 在内的任意字符。
2 常用匹配表达式
2.1 日期匹配
\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匹配
// 匹配
// 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/