正则表达式和通配符

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


1. 设计目的

  • 正则表达式

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

  • 通配符

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


2. 核心符号对比

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

3. 典型示例对比

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

    bash 复制代码
    fd "*.txt"        # 匹配 a.txt, file.txt

    * 直接表示任意字符。

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

    bash 复制代码
    rg ".*\.txt$"     # 匹配行尾的 ".txt"
    • .* 匹配任意字符(包括空)。
    • \. 转义点号。
    • $ 匹配行尾。
示例2:匹配 file1 到 file9
  • 通配符:

    bash 复制代码
    fd "file[1-9]"    # 匹配 file1, file2, ..., file9
  • 正则表达式:

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

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

    bash 复制代码
    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 启用正则。

    bash 复制代码
    fd -g "*.py"          # 通配符模式
    fd --regex "[a-z]+"   # 正则模式
  • ripgrep (rg) 命令 :

    默认用正则表达式,通配符需转义或通过其他参数实现。

    bash 复制代码
    rg ".*\.rs$"          # 正则匹配.rs文件内容

总结表

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

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

相关推荐
Frag0ut2 天前
Notepad++ 正则表达式完全手册:文本处理的终极武器(2026实战版)
正则表达式·notepad++·数据清洗·日志分析·正则替换·提取ip·正则表达式实战
Patrick在香港4 天前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
echome8885 天前
Python 正则表达式:5 个日常够用的模式
python·正则表达式
yivifu6 天前
能够使用Python正则表达式函数的文本处理工具——Calibre电子书编辑器
正则表达式
全栈陈序员7 天前
【Python】基础语法入门(二十九)—— 正则表达式实战:文本处理利器
开发语言·人工智能·python·正则表达式
BruceXu12 天前
\b 在中文里会静默失效:三个正则坑和一份能用的字符边界方案
正则表达式
阿昭L13 天前
正则表达式
正则表达式·编译原理
波力海苔夹心脆67514 天前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
FRing0315 天前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
小白快快跑哦17 天前
python-字符串全解(六):正则表达式-元字符与转义
python·正则表达式·字符串·元字符·转义