我遇到的情况是只支持glob样式的模式,并且不存在完整的正则表达式支持,例如redis键。我想知道两者之间的区别。另外它让我想知道,与一些软件根本不支持正则表达式的glob-style模式相比,实现正则表达式匹配算法更难?
答案 0 :(得分:23)
传统的glob通配符支持一组非常狭窄的元字符 - *
是"任何",?
是一个任意单个字符; Bourne shell还支持[a-z123]
用于一组替代中的单个字符,[!x-z789]
除了列出的那些之外的任何一个字符。
正则表达式显然更丰富,支持重复,并且(在ERE中)交替和特定的重复次数。 Perl风格的正则表达式进一步扩展了形式主义,使得已经编写了多本书,并且会更多。
基本正则表达式对于编程并不比glob通配符更具挑战性,而且现在,无论如何,一个称职的程序员会链接到现有的库。
许多较简单的系统不想让用户承担学习正则表达式的复杂性 - 即使是基本的通配符也是向平均销售人员解释的挑战^ W ^ W不是满员的人 - 计算机用户。
答案 1 :(得分:2)
正则表达式在命令/函数中用于文本中的模式匹配。例如,在grep的模式参数中,或在编程语言中。
shell使用Globbing来使用通配符匹配文件和目录名称。 globbing的功能取决于shell。例如,Bash支持以下通配符:
可以找到更多信息here