【发布时间】:2013-12-16 09:38:12
【问题描述】:
我遇到了以下问题:
文件名“globbing”是否提供标准正则的表现力 表达式?解释
。
问题是,我知道 globbing 是什么,我也知道正则表达式。但这种表现力是什么?我应该根据什么来回答这个问题?我知道在通配符和正则表达式中,“?”和“*”结构的使用方式不同。我应该只提一下它们用法上的差异吗?在维基百科中,正则表达式的表达能力以形式语言和自动机的形式给出。解决方案有那么复杂吗?提前致谢!
【问题讨论】:
我遇到了以下问题:
文件名“globbing”是否提供标准正则的表现力 表达式?解释
。
问题是,我知道 globbing 是什么,我也知道正则表达式。但这种表现力是什么?我应该根据什么来回答这个问题?我知道在通配符和正则表达式中,“?”和“*”结构的使用方式不同。我应该只提一下它们用法上的差异吗?在维基百科中,正则表达式的表达能力以形式语言和自动机的形式给出。解决方案有那么复杂吗?提前致谢!
【问题讨论】:
简短的回答 - 不。不同的 shell 为在 globing 中使用正则表达式语法提供不同级别的支持。
【讨论】:
这个问题可以改写为:
是否可以将所有正则表达式转换为等效的通配表达式,反之,是否可以将所有通配表达式转换为等效的正则表达式?
如果答案(我留给你的智慧)是肯定的,那么据说 globbing 和 regexp 具有相同的表达能力。
如果不是,那么能够“描述更多东西”的人比另一个人具有更强的表达能力。基本上,只要证明所有 globbing 构造都有一个等价的 regexp 构造就足够了,而至少有一个 regexe 不能被翻译成 globbing 表达式,以表明 regexp 具有更强的表达能力。 (请注意,在 Bash 中,globbing 有多个版本(extended 或没有),而正则表达式也出现在 several flavours 中)
想想人类的语言。数字集的表达能力不如单词集。的确,所有的数字都可以用完整的单词来写,但并不是所有的单词都只能用数字来表达(我的意思是对人类来说,当然,在计算机中一切都是数字)
【讨论】:
*,它匹配任何字符串,相当于正则表达式 ..*。所有其他正则表达式重复,例如a*,不能表示为常规通配模式。我不熟悉扩展通配符,但由于它确实编码重复,我不得不把这个问题留给你的智慧。
在维基百科中,正则表达式的表达能力以形式语言和自动机的形式给出。解决方案有那么复杂吗?
是的。
任何系统(例如正则表达式或编程语言)的表达能力都由它们可以解决的问题类型来表示或衡量。 形式化语言和自动机形式化了这个度量。
此图解释了层次结构,也称为Chomsky Hierarchy。
【讨论】: