欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 详解正则表达式与案例

详解正则表达式与案例

2025/2/8 2:17:42 来源:https://blog.csdn.net/zhangxueyi/article/details/145477294  浏览:    关键词:详解正则表达式与案例

文章目录

      • 1. 正则表达式定义
      • 2. 基础正则表达式(BRE)
      • 3. 扩展正则表达式(ERE)
      • 4. 通配符(Wildcards)
      • 5. 案例与分析
        • **案例1:提取IP地址**
        • **案例2:批量重命名文件**
        • **案例3:过滤日志中的错误信息**
        • **案例4:匹配邮箱地址**
      • 总结

1. 正则表达式定义

正则表达式(Regular Expression,简称 regex) 是一种通过特定语法规则描述字符串模式的工具,用于匹配、搜索、替换文本。其核心由普通字符(如字母、数字)和元字符(特殊符号)组成,能够灵活定义复杂的匹配规则。

应用场景

  • 文本搜索(如 grep
  • 字符串替换(如 sed
  • 数据验证(如表单输入)
  • 日志分析

2. 基础正则表达式(BRE)

基础正则表达式是正则表达式的早期标准,需用 \ 转义部分元字符,支持以下核心语法:

元字符说明示例
.匹配任意单个字符(除换行符)a.cabc, aXc
^匹配字符串开头^start → 以start开头的行
$匹配字符串结尾end$ → 以end结尾的行
*前一个字符出现0次或多次ab*cac, abbc
\+前一个字符出现1次或多次a\+bab, aaab
\?前一个字符出现0次或1次a\?bb, ab
\{n\}前一个字符出现n次a\{3\}aaa
\{n,m\}前一个字符出现n到m次a\{2,4\}aa, aaaa
[ ]匹配括号内任意一个字符[aeiou] → 匹配任意元音字母
[^ ]匹配不在括号内的字符[^0-9] → 匹配非数字字符
\转义特殊字符\. → 匹配字面意义的.

特点

  • 需用 \ 转义元字符如 \+, \?, \{ \}
  • 默认不支持 |(或)和 ()(分组)。

3. 扩展正则表达式(ERE)

扩展正则表达式简化了语法,无需转义部分元字符,支持更复杂的逻辑:

元字符说明示例
+前一个字符出现1次或多次ab+ab, abbb
?前一个字符出现0次或1次a?bb, ab
{n}前一个字符出现n次a{3}aaa
{n,m}前一个字符出现n到m次a{2,4}aa, aaaa
``逻辑“或”
()分组,可结合 `` 使用

特点

  • 无需转义 +, ?, { }, |, ()
  • 使用 egrepgrep -E 启用扩展模式。

4. 通配符(Wildcards)

通配符用于文件名匹配(如 ls, find),语法与正则表达式不同:

通配符说明示例
*匹配任意数量任意字符*.txt → 所有.txt文件
?匹配单个任意字符file?.logfile1.log, fileA.log
[ ]匹配括号内任意一个字符[abc]* → 以a、b、c开头的文件
[^ ]排除括号内的字符[^0-9]* → 不以数字开头的文件

注意

  • 通配符由Shell解析,正则表达式由文本工具(如 grep, sed)解析。
  • 通配符的 *? 不同于正则表达式中的含义。

5. 案例与分析

案例1:提取IP地址

目标:从文本中提取 IPv4 地址(如 192.168.1.1)。

正则表达式

grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt
  • [0-9]{1,3}:匹配0-999的数字。
  • \.:匹配点号。
  • {3}:前一部分重复3次(即前三段IP)。
  • -E:启用扩展正则表达式。

案例2:批量重命名文件

目标:将 file1.txt, file2.txt 重命名为 backup1.txt, backup2.txt

通配符 + Shell命令

for f in file*.txt; do mv "$f" "backup${f#file}"; done
  • file*.txt:匹配所有以 file 开头、.txt 结尾的文件。
  • ${f#file}:删除文件名中的 file 前缀。

案例3:过滤日志中的错误信息

目标:从日志文件中提取包含 ERRORWARN 的行。

正则表达式

grep -E 'ERROR|WARN' app.log
  • |:逻辑“或”,匹配 ERRORWARN
  • -E:启用扩展正则表达式。

案例4:匹配邮箱地址

目标:验证简单的邮箱格式(如 user@example.com)。

正则表达式

grep -E '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' emails.txt
  • ^$:严格匹配整个字符串。
  • [a-zA-Z0-9._%+-]+:用户名部分(允许字母、数字、符号)。
  • @.:匹配邮箱中的固定符号。
  • [a-zA-Z]{2,}:域名后缀(如 com, org)。

总结

工具用途关键区别
正则表达式文本内容匹配(grep, sed语法复杂,支持分组、量词、逻辑或
通配符文件名匹配(ls, find语法简单,由Shell解析

核心技巧

  • 区分场景:通配符用于文件名,正则表达式用于文本内容。
  • 转义规则:BRE需转义 +, ?, { },ERE无需转义。
  • 贪婪匹配:正则表达式默认贪婪匹配(如 .* 会匹配最长可能字符串)。

掌握正则表达式和通配符是Linux文本处理的必备技能,通过案例实践可快速提升熟练度!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com