正则表达式

基本语法

正则表达式由不同类型的字符组成,包括普通字符、元字符、分隔符和转义字符等。其中:

  • 普通字符:用于匹配文本中出现的相同字符。

  • 元字符:用于匹配特定的字符或字符集合。例如.表示匹配任意字符,\d表示匹配数字等。

  • 分隔符:用于标记正则表达式的开始和结束,通常为/或者#。

  • 转义字符:使用\将有特殊作用的字符(元字符、分隔符等)转义为普通字符。例如.表示匹配半角句号。

符号含义说明示例
.匹配任意单个字符(不包括换行)a.c 能匹配 abcaxc
^匹配字符串开始^a 匹配以 a 开头的字符串
$匹配字符串结束b$ 匹配以 b 结尾的字符串
*匹配前一个字符 0 次或多次ab* 匹配 a, ab, abb
+匹配前一个字符 1 次或多次ab+ 匹配 ab, abb,不匹配 a
?匹配前一个字符 0 次或 1 次ab? 匹配 aab
{n}恰好匹配 n 次a{3} 匹配 aaa
{n,m}匹配 n 到 m 次a{2,4} 匹配 aa~aaaa
[]字符集,匹配其中任意一个字符[abc] 匹配 abc
[^]否定字符集,匹配不在其中的字符[^abc] 不匹配 abc
\d匹配数字,等价于 [0-9]\d{2} 匹配 2 位数字
\w匹配字母数字下划线,等价于 [A-Za-z0-9_]\w+ 匹配多个字母或数字
\s匹配空白字符(空格、制表符、换行)\s+ 匹配一个或多个空格
``或运算符,匹配左右任一规则`abcdef` 匹配 abc 或 def
()分组,提取匹配结果或配合 `` 使用(ab)+ 匹配 ab 重复出现

示例

匹配含有某个关键词的字符串

筛选出包含关键词05/Jan/2023的日志

  • 日志样例:Info 05/Jan/2023 Warning、Info 06/Jan/2023 Error
  • 正则表达式:.* 05\ /Jan\ /2023.*

.*表示匹配任意零个或多个字符,即05/Jan/2023前后可以有任意字符。
05\ /Jan\ /2023表示匹配关键词05/Jan/2023。
因为Logtail所支持的正则表达式以/作为分隔符,因此需要使用转义字符\将其转变为普通字符,即需要在/前增加转义字符\。

匹配手机号码(中国大陆)

^1[3-9]\d{9}$

^ 表示开头;

1 表示第一位必须是 1;

[3-9] 表示第二位是 3 到 9 中的任意一位;

\d{9} 表示后面跟 9 个数字;

$ 表示结尾

提取邮箱

\b[\w.-]+@[\w.-]+\.\w+\b

[\w.-]+ 匹配邮箱前缀(字母、数字、下划线、点、横线);

@ 是邮箱的中间分隔符;

[\w.-]+ 匹配域名;

. 匹配点;

\w+ 匹配顶级域名(如 com、cn)

验证身份证号(18位)

^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$

\d{6} 是地址码;

(18|19|20)?\d{2} 是出生年份;

(0[1-9]|1[0-2]) 是月份;

(0[1-9]|[12]\d|3[01]) 是日期;^\d{4}-\d{2}-\d{2}$

\d{3} 是顺序码;

[\dXx] 是校验码,可能是数字或 X/x。

匹配日期

^\d{4}-\d{2}-\d{2}$

\d{4} 年份;

-分隔符;

\d{2} 月份;

再一个 -;

最后 \d{2} 是日期。

例子: 2025-06-05

匹配IPv4 地址

\b(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\b

package main

import (
	"fmt"
	"regexp"
)

func main() {
	text := "有效IP: 192.168.1.1,无效IP: 999.999.999.999,还有一个:10.0.0.255"
	
	// IPv4 匹配正则
	pattern := `\b(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\b`

	// 编译正则
	re := regexp.MustCompile(pattern)

	// 查找所有匹配项
	matches := re.FindAllString(text, -1)

	// 输出结果
	for _, match := range matches {
		fmt.Println("匹配到的 IP:", match)
	}
}

输出

匹配到的 IP: 192.168.1.1
匹配到的 IP: 10.0.0.255

匹配URL

https?://[^\s"'<>]+

https? 匹配 http 或 https;: / / 是协议后缀;

[^\s"'<>]+ 匹配非空格、非引号、非尖括号的字符。

https://www.example.com/path?q=1

匹配HTML

<[^>]+>

匹配中文字符串

:判断是否包含中文、处理文本多语言等

[\u4e00-\u9fa5]

\u4e00-\u9fa5 是常用汉字的 Unicode 范围。

匹配强密码

密码安全校验(至少一个字母、一个数字,6~18位)。

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,18}$

提取文件扩展名

\.\w+$

. 匹配点;

\w+ 匹配多个字母、数字、下划线;

$ 匹配结尾。

hello.jpg → .jpg

练习

在线测试正则表达式
regex.com

正则表达式练习 中文学习网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值