这几天打算仔细看下redis命令,到keys * 时,猜测应该使用的是 glob 模式匹配,就详细找了点资料,总结如下:
1.标准glob 模式:
*
?
[abc]
[a-z]
2.类unix系统,[]还可以使用 '!' - 排除
[!abc]
[!a-z]
3.在shell中,'!' 表示 'history' 命令的替代。所以,[!abc],可以使用 [^abc] 来替代!!
4.类unix下的一些shell(c shell 和 bash)支持额外的解析,称作:'alternation' 或 'brace expansion' - 花括号扩展({})
1.生成一个集合:
echo a{p,c,d,b}e // ape ace ade abe
但是,不应该在shell脚本中使用,shell将本中,会原样输出:
echo a{p,c,d,b}e // a{p,c,d,b}e
2.当 {} 同 通配符结合使用,先解析 {},再正常解析通配符。因此:
ls *.{jpg,jpeg,png} // 被解析为:ls *.jpg *.jpeg *.png
echo *.{png,jp{e,}g} - {}可以嵌套使用 // 被解析为:*.jpg *.jpeg *.png
3.{} 还可以用于按次序排列的区间,2个整型或字符之间,以 '..' 分割
echo {1..10}
echo file{1..4}.txt
// - //
新版本的bash允许第3个整型,表示步长
echo {1..10..3} // 输出:1 4 7 10
// - //
4.当 {} 结合变量(variable)一起使用,可能必须结合内建的 'eval' 一起使用。
start = 1; end = 10
echo {$start..$end} // 输出 {1..10}
eval echo {$start..$end} // 输出 1 2 3 4 5 6 7 8 9 10
5.windows下的cmd.exe
不支持 [...]
6.SQL:
标准sql语句的like操作符,支持 ? 和 *,但不支持 []
? == _
* == %
glob术语一般不在SQL社区中使用。很多SQL的实现,扩展了like操作符,支持更多的模式匹配
参考文章:
https://en.wikipedia.org/wiki/Glob_(programming)
https://en.wikipedia.org/wiki/Bash_(Unix_shell)#Brace_expansion
https://en.wikipedia.org/wiki/Wildcard_character
redis的glob模式支持:
?
*
[]
[^]
redis的模式匹配,支持的有点少,stackoverflow上有一篇文章,结合 'lua脚本' ,可匹配更多(我们用php应该也可以)
http://stackoverflow.com/questions/29942541/how-to-get-keys-which-does-not-match-a-particular-pattern-in-redis