详解正则表达式与案例

news/2025/2/10 12:14:27/

文章目录

      • 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]* → 不以数字开头的文件

注意


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文本处理的必备技能,通过案例实践可快速提升熟练度!


http://www.ppmy.cn/news/1570855.html

相关文章

ToDesk云电脑将终结显卡溢价,Web端浏览器、安卓、IOS免费试用

随着市面上显卡需求增多,高端显卡供给却减少,显卡价格一路水涨船高。更有不少炒家以高于官方指导价几千元的价格借机囤货,计划加价后转手卖向市场,优质的显卡能够大幅提升电脑设备产品力,加之市场供需关系失衡&#xf…

开启蓝耘之旅:DeepSeek R1 模型在智算平台的起步教程

----------------------------------------------------------我的个人主页-------------------- 动动你的手指----------------------------------------点赞👍 收藏❤--------------------------------------------------------------- 引言 在深度学习的广袤领…

DeepSeek:从入门到精通(100页PDF)

今天下载了一份《DeepSeek:从入门到精通》,文章从不同角度进行分析,非常全面,分享给大家。 PDF有100多页,我汇总了提纲如下: 一、DeepSeek 简介 DeepSeek 是一家专注通用人工智能(AGI&#x…

mmap 文件映射

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 mmap介绍🦋 基本说明🦋 参数介绍🦋 返回值 二:🔥 demo代码🦋 写入映射&#x1f98b…

SOME/IP--协议英文原文讲解5

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 这一章节…

ORB-SLAM2源码学习:Tracking.cc:GrabImageStereo、GrabImageRGBD、GrabImageMonocular处理图像

前言 该部分函数在Tracking.cc源文件中定义,用于处理图像。 1.函数作用: 1.GrabImageStereo 函数的主要作用是处理输入的双目图像(左视图和右视图),进行必要的预处理(颜色转换),创…

react使用if判断

1、第一种 function Dade(req:any){console.log(req)if(req.data.id 1){return <span>66666</span>}return <span style{{color:"red"}}>8888</span>}2、使用 {win.map((req,index) > ( <> <Dade data{req}/>{req.id 1 ?…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f680;1.上传头像 -持久…