我遇到过仅支持 glob 样式模式且不支持完整正则表达式的情况,例如 redis 键。我想知道两者之间的区别。这也让我想知道,与某些软件根本不支持正则表达式的全局样式模式相比,实现正则表达式匹配算法是否更困难?
传统的全局通配符支持非常狭窄的元字符集 -
*
是“任何内容”,?
是任意单个字符; Bourne shell 还支持 [a-z123]
表示一组替代字符中的单个字符(其中 a-z
表示字符范围 a
、b
、c
、... z
)和 [!x-z789]
除列出的任何一项。
正则表达式显然要丰富得多,支持重复、(在 ERE 中)交替和特定的重复次数。 Perl 风格的正则表达式进一步扩展了形式主义,以至于已经写了多本书,而且还会写更多书。
基本的正则表达式并不比 glob 通配符更具编程挑战性,而且如今,无论如何,有能力的程序员都会链接到任何一种情况下的现有库。
许多更简单的系统不想让用户承担学习正则表达式的复杂性——即使是基本的通配符也很难向非全职计算机用户的普通销售人员解释^W^W。
正则表达式在命令/函数中用于文本中的模式匹配。例如在 grep 的模式参数中,或者在编程语言中。
Shell 使用通配符来使用通配符匹配文件和目录名称。通配符的功能取决于 shell。例如,Bash 支持通配符,例如:
更多信息可以在这里找到