【问题标题】:what does regular in regex/"regular expression" mean?正则表达式/“正则表达式”中的正则是什么意思?
【发布时间】:2011-06-15 21:45:09
【问题描述】:

短语“正则表达式”中的“正则”是什么意思?

我听说正则表达式曾经是常规的,但现在没有了

【问题讨论】:

  • 正则表达式有哪些方面不是正则的? / 旨在不只是匹配常规语言?

标签: regex perl parsing tokenize


【解决方案1】:

正则表达式中的regular来自于它匹配regular language。

regular expressions used in formal language theory 的概念与 PCRE 等引擎调用正则表达式的概念大不相同。 PCRE 和其他类似引擎具有lookahead、conditionals 和recursion 等功能,使其能够匹配非常规语言。

【讨论】:

  • 所以我想在 BRE 时代,它仍然很正常。没有条件。 ERE 然后添加了条件......所以他们在技术上能够匹配不规则的语言。听起来对吗?
  • @barlop 不,POSIX BRE 有反向引用,反向引用是非常规的特性。
  • @hobbs 我猜反向引用也不适合不规则的语法,因为它们与解析并没有真正的关系,它们是用来替换的。替换如何与语法有关?它根本不是为了遵循语法,所以它不像条件或前瞻
  • @barlop:反向引用也用于匹配——例如,/(\d)\1\1/ 匹配三个相同的数字。一些工具默认使用理论上正确的 DFA 引擎,但如果正则表达式包含反向引用,则切换到 NFA 引擎。参考:regular-expressions.info/grep.html
  • @barlop POSIX “标准化”正则表达式已经在一百万个地方使用,并且在许多实现使用反向引用之后。 V6 Unix ed (1975) 中存在编号的捕获组,V7 Unix ed (1979) 中存在编号的反向引用。也许其他人想做更彻底的提前工作,但我的理解是 ed 是正则表达式的原始发布者。 V6 和 V7 Unix grep 都被记录为接受相同的正则表达式 ed 。 :)
【解决方案2】:

它来自常规语言。这是形式语言理论的一部分。查看Chomsky hierarchy 了解其他正式语言。

【讨论】:

    【解决方案3】:

    表示它是一种常规语言。

    正则表达式仍然很流行。有些人不喜欢它们,但它们仍然是匹配某些类型字符串的快速简便(如果您知道如何使用它们)的方式。替代方法通常是几行代码循环遍历字符串并提取您需要的位,这更糟糕!

    我仍然经常使用它们(完全是双关语),给你一个我前几天用来匹配吉他和弦线条而不是歌词的用例。它们也常用于电子邮件地址的基本验证等。

    他们肯定没有死。

    【讨论】:

    • OP并没有暗示它们不再被使用,只是它们不再是常规的,其他人已经证实了这一点。
    【解决方案4】:

    我认为它来自于正则表达式描述的语法类别的术语:regular 语法(或“常规”语言)。 那个这个词的来源很可能是通过访问维基百科来回答的。

    现代正则表达式引擎实现了所有这些花哨的前瞻、模式重新匹配和子表达式计数功能,嗯,它们正在识别一类作为常规语法超集的语法。 “经典”正则表达式以机械方式对应于称为“有限自动机”的理论机器。这本身就是一个非常有趣的主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2015-07-21
      • 2011-08-28
      • 1970-01-01
      • 2012-09-07
      • 2012-05-07
      • 2015-07-23
      相关资源
      最近更新 更多