通配符和正则,* 和 ? 的意思正好不一样
通配符(shell 的 glob、SQL LIKE 的 % _)和正则看着像,其实是两套规则:
| 通配符 | 正则 | |
|---|---|---|
* | 任意一串字符 | 把前一个重复 0 次或多次 |
? | 恰好一个字符 | 前一个可有可无 |
| 匹配范围 | 整个字符串 | 默认只要包含就算 |
几个反直觉的例子:
file?.txt匹配file1.txt,不匹配file.txt;正则colou?r两个都匹配。- 正则
/a*/能匹配空串,所以"xyz"也算命中。 - 通配符
a*.log翻成正则是^a.*\.log$:点要转义,两头要锚定。
很多库内部就是把通配符翻译成正则再跑的。