工具

通配符和正则,* 和 ? 的意思正好不一样

通配符(shell 的 glob、SQL LIKE 的 % _)和正则看着像,其实是两套规则:

通配符正则
*任意一串字符把前一个重复 0 次或多次
?恰好一个字符前一个可有可无
匹配范围整个字符串默认只要包含就算

几个反直觉的例子:

  • file?.txt 匹配 file1.txt,不匹配 file.txt;正则 colou?r 两个都匹配。
  • 正则 /a*/ 能匹配空串,所以 "xyz" 也算命中。
  • 通配符 a*.log 翻成正则是 ^a.*\.log$:点要转义,两头要锚定。

很多库内部就是把通配符翻译成正则再跑的。

esc