Glob模式

2022.1.20 星期四 :

教程

glob 是一种文件匹配模式,全称 global,它起源于 Unix 的 bash shell 中,比如在 linux 中常用的 mv .txt tmp/ 中,.txt 就使用到了这种模式。

# 1 glob 模式匹配简明教程

基础语法

通配符 描述 示例 匹配 不匹配
* 匹配0个或多个字符,包含空串 Law* Law, Laws和Lawer La, aw
? 匹配1个字符 ?at cat, bat at
[abc] 匹配括号内字符集合中的单个字符 [cb]at cat, bat at, bcat
[a-z] 匹配括号内字符范围中的单个字符 [a-z]at aat, bat, zat at, bcat, Bat
[^abc]或[!abc] 匹配括号内字符集合中的单个字符 [cb]at cat, bat at, bcat
[^a-z]或[!a-z] 匹配括号内字符范围中的单个字符 [a-z]at aat, bat, zat at, bcat, Bat

扩展语法

除了基础语法外,bash 还支持 glob 的一些扩展语法,主要包含三种:

Brace Expansion
globstar
extglob
三种扩展语法的定义和描述如下:

通配符 描述 示例 匹配 不匹配
{x, y, …} Brace Expansion,展开花括号内容,支持展开嵌套括号 a.{png,jp{,e}g} a.png, a.jpg, a.jpeg
** globstar,匹配所有文件和任意层目录,如果**后面紧接着/则只匹配目录,不含隐藏目录 src/** src/a.js, src/b/a.js, src/b/ src/.hide/a.js
?(pattern-list) 匹配0次或1次给定的模式 a.?(txt bin) a., a.txt, a.bin a
*(pattern-list) 匹配0次或多次给定的模式 a.*(txt bin) a., a.txt, a.bin, a.txtbin a
+(pattern-list) 匹配1次或多次给定的模式 a.+(txt bin) a.txt, a.bin, a.txtbin a., a
@(pattern-list) 匹配给定的模式 a.@(txt bin) a.txt, a.bin a., a.txtbin
!(pattern-list) 匹配非给定的模式 a.!(txt bin) a., a.txtbin a.txt, a.bin

与 regexp 的差异

glob 模式主要用于匹配文件路径,当然也可以用于匹配字符串,不过在匹配字符串的能力上比 regexp 要弱很多。由于 glob 模式和 regexp 存在相同的元字符,但是含义却不同,容易导致混淆,为了避免混淆,下面将 glob 模式转换成对应的 regexp 表示,以便区分他们的异同点。

glob | regexp | 精确的 regexp
* | . | ^(?!.)[^\/]?$
? | . | ^(?!.)[^\/]$
[a-z] | [a-z] | ^[a-z]$
glob 匹配的是整个字符串,而 regexp 默认匹配的是子串,regexp 如果要匹配整个字符串需显式指定^和$。正则表达式中的(?!.),其表示不匹配隐藏文件

JavaScript API

knowledge is no pay,reward is kindness
0%