介绍
Glob 用于路径匹配,类似于正则表达式但是语法相对简单。
Glob 是一个含有 *,?{}[] 特殊字符的字符串,并与目标字符串匹配。可以用来做文件路径匹配或文件查找。
例如:
Linux 下的命令
ls *.txt
其中的 *.txt 就是一个 glob 语句。
一般主流开发语言都支持glob,python3.4、java7、golang 等
语法规则
注意:不同的开发语言,对glob的语法支持可能不一样,下面只是介绍一些规则,具体使用要结合开发语言
一个星号 *
匹配任意个数的字符,包括空。不包括路径边界 / 或 \。
例如 /path/*/abc 可以匹配 /path/a/abc 和 /path/b/abc 等。
两个星号 **
和一个星号类似,区别是可以跨路径边界,一般用来匹配多级目录。
例如 /path/**/abc可以用来匹配 /path/a/abc 、/path/b/abc 、/path/a/b/abc、/path/a/b/c/abc 等。
一个问号 ?
匹配任意一个字符
大括号 {}
大括号用来指定一个子模式匹配集合
例如:{sun,moon,stars} 可以匹配 sun moon starts , {temp*, tmp*}可以匹配任何以 temp tmp 开头的字符串等。
方括号[]
方括号表示匹配括号内的任意一个单个字符,当有 - 时表示匹配任意一个连续范围内的单个字符。
例如:[aeiou] 匹配任意一个小写元音字符,[0-9]匹配任意一个数字,[A-Z]匹配任意一个大写字母,[a-z,A-Z]匹配任意一个大写或小写字母。另外,在方括号内, * ? \字符仅匹配它们自身。
任意其它字符
任意的其他字符表示匹配它们自身。
反斜杠 \ 转义
匹配 * ? 或其他特殊字符需要使用反斜杠\转义。例如: \\ 匹配一个反斜杠,\? 匹配一个问号。
例子
*.html 匹配所有 .html 结尾的字符串??? 匹配所有由三个数字或字母构成字符串,如 aaa abc ab1 123*[0-9]* 匹配所有含有一个数字的字符串*.{htm,html,pdf} 匹配所有以 .htm .html 或 .pdf 结尾的字符串a?*.java 匹配所有以 a 开头,且a 之后至少由一个字母或数字,且以 .java 结尾的字符传{foo*,*[0-9]*} 匹配所有以 foo 开头,或含有数字的字符串,如 foobar x1y foo1xyz