当前位置: 首页 > news >正文

正则表达式和通配符

正则表达式(Regular Expression)和通配符(Glob Pattern)是两种不同的模式匹配语法,虽然看起来相似(都使用 *? 等符号),但它们的用途、规则和场景完全不同。以下是它们的核心区别和示例:


1. 设计目的

  • 正则表达式
    用于匹配文本内容(如文件内容、字符串),功能强大且灵活,支持复杂逻辑(如分组、回溯、量词)。
    工具示例grepripgrepsedPerl、编程语言中的正则库。

  • 通配符
    用于匹配文件名或路径(如 *.txt),语法简单,主要用于文件操作。
    工具示例fdfind -name、Shell 的文件扩展(如 ls *.txt)。


2. 核心符号对比

符号正则表达式含义通配符含义
*匹配前一个字符的0次或多次匹配任意数量的任意字符(包括0个)
?匹配前一个字符的1次匹配单个任意字符
[...]匹配括号内的任意一个字符同正则(如 [a-z] 匹配小写字母)
[^...]匹配不在括号内的字符同正则
^匹配行首无特殊含义(普通字符)
$匹配行尾无特殊含义(普通字符)
.*匹配任意字符(包括空字符串)无(需用 * 单独实现)
\转义字符同正则

3. 典型示例对比

示例1:匹配所有 .txt 文件
  • 通配符(用于文件名):

    fd "*.txt"        # 匹配 a.txt, file.txt
    

    * 直接表示任意字符。

  • 正则表达式(用于文本内容):

    rg ".*\.txt$"     # 匹配行尾的 ".txt"
    
    • .* 匹配任意字符(包括空)。
    • \. 转义点号。
    • $ 匹配行尾。
示例2:匹配 file1file9
  • 通配符

    fd "file[1-9]"    # 匹配 file1, file2, ..., file9
    
  • 正则表达式

    rg "file[1-9]"    # 匹配文本中的 "file1" 到 "file9"
    
示例3:匹配以 a 开头、以 z 结尾的字符串
  • 正则表达式

    rg "^a.*z$"       # 匹配 "abz", "a123z"
    
    • ^a 开头是 a
    • .* 中间任意字符。
    • z$ 结尾是 z
  • 通配符(无法直接实现,需近似):

    fd "a*z"          # 匹配文件名如 "abz", "a_file_z"
    

    * 不保证中间字符的精确控制。


4. 使用场景

  • 用通配符(Glob)的场景

    • 快速匹配文件名(如 rm *.log)。
    • 文件批量操作(如 mv /path/*.jpg ./images)。
    • Shell 命令中的路径扩展(如 ls data/*.csv)。
  • 用正则表达式的场景

    • 搜索文件内容(如 rg "\d{3}-\d{4}" 匹配电话号码)。
    • 文本替换(如 sed -E 's/^(.*)/Prefix: \1/' file.txt)。
    • 编程中的字符串验证(如邮箱格式校验)。

5. 工具中的默认模式

  • fd 命令
    默认用通配符(-g),需 --regex 启用正则。

    fd -g "*.py"          # 通配符模式
    fd --regex "[a-z]+"   # 正则模式
    
  • ripgrep (rg) 命令
    默认用正则表达式,通配符需转义或通过其他参数实现。

    rg ".*\.rs$"          # 正则匹配.rs文件内容
    

总结表

特性正则表达式通配符
用途文本内容匹配文件名/路径匹配
复杂度高(支持分组、量词等)低(简单模式)
常用符号.*, ^, $, \d*, ?, [...]
工具示例rg, sed, grep -Efd, find, ls *.txt

掌握两者的区别可以避免混淆,根据场景选择合适工具!

相关文章:

  • Python 中的 `partial`:函数参数预设的艺术
  • unity UI管理器
  • 笔记:代码随想录算法训练营day64:拓扑排序精讲、dijkstra(朴素版)精讲
  • 算法设计学习3
  • HTTP,请求响应报头,以及抓包工具的讨论
  • go 使用os复制文件
  • ChatGPT 与 DeepSeek:学术科研的智能 “双引擎”
  • 经典卷积神经网络LeNet实现(pytorch版)
  • Unity3D依赖注入容器使用指南博毅创为博毅创为
  • Java接口(二)
  • dp4-ai 安装教程
  • 化繁为简解决leetcode第1289题下降路径最小和II
  • 深度解剖 TCP 三次握手 四次挥手
  • LXC 导入多Linux系统
  • mybatis-genertor(代码生成)源码及扩展笔记
  • stm32F103C8T6引脚定义
  • python 的gui开发示例
  • MySQL Online DDL:演变、原理与实践
  • RAG 文档嵌入到向量数据库FAISS
  • 前沿科技:具身智能(Embodied Intelligence)详解
  • 新能源车盈利拐点:8家上市车企去年合计净利854亿元,多家扭亏
  • 央行4月开展12000亿元买断式逆回购操作
  • 跟着京剧电影游运河,京杭大运河沿线六城举行京剧电影展映
  • 王毅:为改革完善全球治理作出金砖贡献
  • 绿地控股:今年一季度营业收入356亿元,中高层管理人员带头降薪
  • 北京动物园:大熊猫“萌兰”没有参加日本大阪世博会的计划