正则表达式和通配符

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


1. 设计目的

  • 正则表达式

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

  • 通配符

    用于匹配文件名或路径 (如 *.txt),语法简单,主要用于文件操作。
    工具示例fdfind -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:匹配 file1file9
  • 通配符

    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

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

相关推荐
烛阴2 天前
C# 正则表达式(4):分支与回溯引用
前端·正则表达式·c#
安且惜2 天前
根据正则表达式生成字符串
正则表达式
GDAL3 天前
vscode 使用正则查找替换
ide·vscode·正则表达式·编辑器
烛阴5 天前
C# 正则表达式(3):分组与捕获——从子串提取到命名分组
前端·正则表达式·c#
WangMing_X5 天前
C# 数据验证常用正则表达式
正则表达式
小北方城市网5 天前
第7课:Vue 3应用性能优化与进阶实战——让你的应用更快、更流畅
前端·javascript·vue.js·ai·性能优化·正则表达式·json
gis分享者5 天前
Bash 中如何使用正则表达式进行文本处理?(中等)
正则表达式·bash·shell·文本·处理
mofei121386 天前
正则表达式高级用法指南
python·正则表达式·零宽断言·原子分组
jayson.h7 天前
正则表达式
正则表达式
3824278277 天前
python:正则表达式
前端·python·正则表达式