Hello World

吞风吻雨葬落日 欺山赶海踏雪径

0%

Glob Patterns 笔记

很多地方的都是使用的glob模式匹配,比如linuxshel, vscode的搜索,gitgitignore文件,npmpackage.json等等。

这次因为aone单测排除文件逻辑也改成了glob模式匹配,所以记录一下glob模式匹配的语法。

以下是一些常用的glob模式以及它们的含义(参考链接):

  1. *:匹配零个或多个字符(除了目录分隔符)。例如,*.txt会匹配当前目录中所有以.txt结尾的文件。
  2. ?:匹配任意单个字符。例如,?.txt会匹配所有单一字符后跟.txt的文件,如a.txt,但不会匹配aa.txt
    3.[...]:匹配方括号内的任意单个字符。可以使用破折号-表示字符范围。例如,[a-c].txt会匹配a.txtb.txtc.txt
  3. [^...][!...]:匹配不在方括号内的任意单个字符。例如,[^a-c].txt会匹配除了a.txtb.txtc.txt之外的任何以.txt结尾的文件。
  4. **:在一些系统中,这个模式用于匹配任意数量的目录和子目录。例如,在Node.jsglob模块中,**/*.txt会匹配当前目录以及所有子目录中的.txt文件。
  5. {}:分组模式,匹配大括号内以逗号分隔的任意模式之一。例如,{*.txt,*.md}会匹配所有扩展名为.txt.md的文件。
  6. \:转义字符,用于匹配特殊字符。例如,\*会匹配字面的*字符。
  7. /:匹配路径分隔符,即时在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中值得注意的是 **/ 的使用,其他的与常用正则表达式一致。