【问题标题】:Globbing and Regex通配符和正则表达式
【发布时间】:2013-12-16 09:38:12
【问题描述】:

我遇到了以下问题:

文件名“globbing”是否提供标准正则的表现力
表达式?解释

问题是,我知道 globbing 是什么,我也知道正则表达式。但这种表现力是什么?我应该根据什么来回答这个问题?我知道在通配符和正则表达式中,“?”和“*”结构的使用方式不同。我应该只提一下它们用法上的差异吗?在维基百科中,正则表达式的表达能力以形式语言和自动机的形式给出。解决方案有那么复杂吗?提前致谢!

【问题讨论】:

    标签: regex bash unix glob


    【解决方案1】:

    简短的回答 - 不。不同的 shell 为在 globing 中使用正则表达式语法提供不同级别的支持。

    【讨论】:

      【解决方案2】:

      这个问题可以改写为:

      是否可以将所有正则表达式转换为等效的通配表达式,反之,是否可以将所有通配表达式转换为等效的正则表达式?

      如果答案(我留给你的智慧)是肯定的,那么据说 globbing 和 regexp 具有相同的表达能力。

      如果不是,那么能够“描述更多东西”的人比另一个人具有更强的表达能力。基本上,只要证明所有 globbing 构造都有一个等价的 regexp 构造就足够了,而至少有一个 regexe 不能被翻译成 globbing 表达式,以表明 regexp 具有更强的表达能力。 (请注意,在 Bash 中,globbing 有多个版本(extended 或没有),而正则表达式也出现在 several flavours 中)

      想想人类的语言。数字集的表达能力不如单词集。的确,所有的数字都可以用完整的单词来写,但并不是所有的单词都只能用数字来表达(我的意思是对人类来说,当然,在计算机中一切都是数字)

      【讨论】:

      • 常规 globbing 不需要非常聪明:它可以编码的唯一重复是 *,它匹配任何字符串,相当于正则表达式 ..*。所有其他正则表达式重复,例如a*,不能表示为常规通配模式。我不熟悉扩展通配符,但由于它确实编码重复,我不得不把这个问题留给你的智慧。
      【解决方案3】:

      在维基百科中,正则表达式的表达能力以形式语言和自动机的形式给出。解决方案有那么复杂吗?

      是的。

      任何系统(例如正则表达式或编程语言)的表达能力都由它们可以解决的问题类型来表示或衡量。 形式化语言和自动机形式化了这个度量。

      此图解释了层次结构,也称为Chomsky Hierarchy

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-03
        • 2012-12-01
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多