我遇到了以下问题:
Does filename “globbing” provide the expressive power of standard regular expressions? Explain
。
问题是,我知道什么是斑点,我知道正则表达式。但这种表现力是什么?我应该在什么基础上回答这个问题?我知道在globbing和regex中,“?”和“*”结构的使用方式不同。我应该只提一下它们的用法差异吗?在维基百科中,正则表达式的表达能力是根据形式语言和自动机来给出的。解决方案是否复杂?提前谢谢!
答案 0 :(得分:5)
在维基百科中,正则表达式的表达能力以形式语言和自动机的形式给出。解决方案是否复杂?
是强>
任何系统的表达能力,例如正则表达式或编程语言,都可以通过它们可以解决的问题类型来表示或衡量。 正式语言和Automata正式确定了这一措施。
此图解释了层次结构,也称为Chomsky Hierarchy。
答案 1 :(得分:4)
这个问题可以改为:
是否可以将所有regexp转换为等效的globbing表达式,相反,是否可以将所有globbing表达式转换为等效的regexp?
如果答案(我留给你的睿智)是肯定的,那么据说globbing和regexp具有相同的表达能力。
如果没有,能够“描述更多东西”的那个比另一个更具有表现力。基本上,只需要显示所有globbing构造都具有等效的regexp构造,而至少有一个regexep不能转换为globbing表达式以表明regexp具有更强的表达能力。 (注意,在Bash中,globbing有几个版本(extended或不是){regexp也有several flavours}
想想人类语言。这组数字的表达能力低于单词组。实际上,所有数字都可以用完整的单词写出来,但不是所有的单词都只能用数字来表达(对于我说的人,当然,在计算机中,一切都是数字)
答案 2 :(得分:0)
简短回答 - 不。不同的shell为在globing中使用正则表达式语法提供了不同级别的支持。