很多地方的都是使用的glob模式匹配,比如linux的shel, vscode的搜索,git的gitignore文件,npm的package.json等等。
这次因为aone单测排除文件逻辑也改成了glob模式匹配,所以记录一下glob模式匹配的语法。
以下是一些常用的glob模式以及它们的含义(参考链接):
*:匹配零个或多个字符(除了目录分隔符)。例如,*.txt会匹配当前目录中所有以.txt结尾的文件。?:匹配任意单个字符。例如,?.txt会匹配所有单一字符后跟.txt的文件,如a.txt,但不会匹配aa.txt。
3.[...]:匹配方括号内的任意单个字符。可以使用破折号-表示字符范围。例如,[a-c].txt会匹配a.txt、b.txt和c.txt。[^...]或[!...]:匹配不在方括号内的任意单个字符。例如,[^a-c].txt会匹配除了a.txt、b.txt和c.txt之外的任何以.txt结尾的文件。**:在一些系统中,这个模式用于匹配任意数量的目录和子目录。例如,在Node.js的glob模块中,**/*.txt会匹配当前目录以及所有子目录中的.txt文件。{}:分组模式,匹配大括号内以逗号分隔的任意模式之一。例如,{*.txt,*.md}会匹配所有扩展名为.txt或.md的文件。\:转义字符,用于匹配特殊字符。例如,\*会匹配字面的*字符。/:匹配路径分隔符,即时在windows中也是使用/作为路径分隔符。
下面是一些glob模式的示例和它们的匹配结果:
*.js:匹配当前目录下所有扩展名为.js的文件。
*/*:匹配当前目录下所有子目录中的文件,但不包括子目录的子目录(不递归)。
**/*.js:匹配当前目录以及所有子目录中的扩展名为.js的文件(递归)。
images/*.png:匹配images子目录下所有扩展名为.png的文件。
*.{png,jpg,jpeg}:匹配当前目录下所有扩展名为.png、.jpg或.jpeg的文件。
data[0-9].txt:匹配文件名为data后跟一个数字,扩展名为.txt的文件(如data1.txt)。
线上测试地址: https://globster.xyz/
综上:glob中值得注意的是 ** 与 / 的使用,其他的与常用正则表达式一致。