帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 日志服务
  4. 操作指南
  5. 数据采集
  6. 数据采集常见问题
  7. 正则表达式入门教程

正则表达式入门教程

  • 数据采集常见问题
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

正则表达式是一种强大的文本匹配工具,可以用于在文本中查找特定的模式。本文将提供简单且实用的正则表达式快速上手教程,帮助您快速掌握其基本用法。​

重要

本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

如果您对正则表达式不够熟悉,可以使用Regex101等工具进行练习和调试。这些工具支持直观展示正则表达式和文本的匹配过程。本文以Regex101为例,介绍各个示例。

基本语法

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

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

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

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

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

如下图所示,Regex101工具默认在正则表达式a.\d\.前添加了分隔符/。其中,a表示匹配字母a,.表示匹配一个任意字符,\d表示匹配一个任意数字,\.表示匹配半角句号。image.png

下表罗列了常用的特殊字符及其含义。

重要

在不同的编程语言和正则表达式引擎中,支持的符号和语法可能有所差异。在实际编程中,需要结合具体的语言和工具了解其支持的正则表达式语法。

符号

含义

.

匹配任意一个字符,除了换行符。

\d

匹配任意一个数字字符,等价于[0-9]。

\D

匹配除数字字符之外的任意字符,等价于[^0-9]。

\w

匹配任意一个字母、数字或下划线字符,等价于[A-Za-z0-9_]。

\W

匹配除字母、数字和下划线字符之外的任意字符,等价于[^A-Za-z0-9_]。

\s

匹配任意一个空白字符,包括空格、制表符、换行符等。

\S

匹配除空白字符之外的任意字符。

\b

匹配单词边界,即单词字符和非单词字符的交界处。

\B

匹配非单词边界。

*

匹配前面的字符0次或多次。

+

匹配前面的字符1次或多次。

?

匹配前面的字符0次或1次。

|

将两个匹配逻辑进行或运算。

{n}

匹配前面的字符n次。

{n,}

匹配前面的字符至少n次。

{n,m}

匹配前面的字符至少n次,但不超过m次。

[abc]

匹配字符集中的任意一个字符。

[^abc]

匹配除字符集中的字符之外的任意字符。

^

匹配字符串的开头。

$

匹配字符串的结尾。

()

分组,将括号内的一组字符看作一个整体。

/

常用分隔符,用于标记正则表达式的开头和结尾。

\

转义字符,使用\将有特殊作用的字符(元字符、分隔符等)转义为普通字符。

示例

示例一:匹配含有某个关键词的字符串

筛选出包含关键词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所支持的正则表达式以/作为分隔符,因此需要使用转义字符\将其转变为普通字符,即需要在/前增加转义字符\。

image.png

示例二:匹配手机号码

筛选出包含以111或222开头的11位手机号码的日志。

  • 样例:11144445555、22266667777、33388889999

  • 正则表达式:(111|222)\d{8}

    手机号码前三位是运营商号码,中间四位是地区编码,后四位则是任意数字。假设运营商号码只有111和222,地区编码为任意数字。

    • (111|222)表示一个分组,包含了两个可能的值,即111或222。

    • \d表示匹配一个数字。

    • {8}表示前面的\d需要匹配8次,即匹配8个数字。

image.png

示例三:匹配一个完整字符串

筛选出格式为[时间] [级别] [模块] [信息]的日志,其中时间为yyyy-mm-dd hh:mm:ss格式,级别包括DEBUG、INFO、WARN和ERROR,模块和信息为任意的字符串。

  • 日志样例:[2021-09-23 10:23:45] [INFO] [user login] [user login success]

  • 正则表达式:^\[\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}\] \[(DEBUG|INFO|WARN|ERROR)\] \[.+\] \[.+\]$

    • \[、\]表示匹配[]字符,因为[]在正则语法中有特殊含义,因此需要添加转义字符\。

    • \[\d{4}\-\d{2}\-\d{2} \d{2}:\d{2}:\d{2}\]表示匹配日期和时间。

    • \[(DEBUG|INFO|WARN|ERROR)\]表示匹配各个日志级别。

    • \[.+\] \[.+\]$表示匹配任意的非空字符串。

image.png

示例四:匹配不以某关键词开头的字符串

筛选出不以DEBUG开头的日志。

  • 日志样例:DEBUG: test debug、INFO: test info

  • 正则表达式:^(?!DEBUG).*

    • ^表示字符串的开始位置,即DEBUG是处于字符串的开头位置。

    • (?!DEBUG)表示排除包含DEBUG的日志。(?!DEBUG)为正向否定预查,格式为(?!<pattern>),其中<pattern>为需要排除的内容。

    • .*表示匹配任意字符,直到该行日志结束。

image.png

示例五:匹配不包含关键词的字符串

筛选出不包含INFO或DEBUG的日志。

  • 日志样例:hello world、INFO、ERROR message、DEBUG、warning log、error INFO、debug detail、info status

  • 正则表达式:^(?!.*(INFO|DEBUG)).*

    • ^表示字符串的开始位置,即INFO或DEBUG是处于字符串的开头位置。

    • (?!.*(INFO|DEBUG))表示排除包含INFO或DEBUG的日志。

    • .*用于匹配任意字符,直到该行日志结束。

image.png

参考链接

  • 如何调试正则表达式

  • 如何优化正则表达式的性能

  • Regular-Expressions.info

  • regex-exclude-word

  • regex-exclude-pattern​

相关文章

日志管理 2025-04-22 10:59

日志服务如何存储、管理用户的日志? 日志库(Logstore)是日志服务中的日志存储和查询的基本单元,通常用于存储一类日志数据。目前,支持在控制台或者通过API完成对日志库的增删改查操作。日志库创建完成后,用户通过API或SDK向指定日志库写入日志数据。如果用户希望收集阿里云ECS服务器的数据,日志

Logtail基本问题 2025-04-22 10:59

本文介绍Logtail的基本问题。 什么是Logtail? Logtail是日志服务提供的一种便于日志接入的日志采集客户端。在您

如何排查容器日志采集异常 2025-04-22 10:59

当您使用Logtail采集容器(标准容器、Kubernetes)日志时,如果采集状态异常,可以根据本文进行问题排查、运行状态检查等运维操作。

如何获取Docker容器的Label和环境变量 2025-04-22 10:59

当您使用Logtail采集容器日志时,可以通过Label和环境变量对待采集的容器进行过滤。Label指运行docker inspect命令时显示的容器元数据中的标签信息,环境变量是在容器启动时设置的运行时环境参数。本文介绍如何获取容器的Label和环境变量。

Logtail采集日志失败的排查思路 2025-04-22 10:59

使用Logtail采集日志后,如果预览页面为空或查询页面无数据,您可以根据本文步骤进行排查。 排查概览 日志文件未更新:配置Logtail采集后,如果待采集的日志文件无更新,则Logtai

日志服务采集数据常见的错误类型 2025-04-22 10:59

本文介绍日志服务采集数据常见的错误类型及对应的解决方法。 如果您遇到其他问题,请提交工单处理。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1