【发布时间】:2011-06-15 21:45:09
【问题描述】:
短语“正则表达式”中的“正则”是什么意思?
我听说正则表达式曾经是常规的,但现在没有了
【问题讨论】:
-
正则表达式有哪些方面不是正则的? / 旨在不只是匹配常规语言?
标签: regex perl parsing tokenize
短语“正则表达式”中的“正则”是什么意思?
我听说正则表达式曾经是常规的,但现在没有了
【问题讨论】:
标签: regex perl parsing tokenize
正则表达式中的regular来自于它匹配regular language。
regular expressions used in formal language theory 的概念与 PCRE 等引擎调用正则表达式的概念大不相同。 PCRE 和其他类似引擎具有lookahead、conditionals 和recursion 等功能,使其能够匹配非常规语言。
【讨论】:
/(\d)\1\1/ 匹配三个相同的数字。一些工具默认使用理论上正确的 DFA 引擎,但如果正则表达式包含反向引用,则切换到 NFA 引擎。参考:regular-expressions.info/grep.html
ed (1975) 中存在编号的捕获组,V7 Unix ed (1979) 中存在编号的反向引用。也许其他人想做更彻底的提前工作,但我的理解是 ed 是正则表达式的原始发布者。 V6 和 V7 Unix grep 都被记录为接受相同的正则表达式 ed 。 :)
它来自常规语言。这是形式语言理论的一部分。查看Chomsky hierarchy 了解其他正式语言。
【讨论】:
表示它是一种常规语言。
正则表达式仍然很流行。有些人不喜欢它们,但它们仍然是匹配某些类型字符串的快速简便(如果您知道如何使用它们)的方式。替代方法通常是几行代码循环遍历字符串并提取您需要的位,这更糟糕!
我仍然经常使用它们(完全是双关语),给你一个我前几天用来匹配吉他和弦线条而不是歌词的用例。它们也常用于电子邮件地址的基本验证等。
他们肯定没有死。
【讨论】:
我认为它来自于正则表达式描述的语法类别的术语:regular 语法(或“常规”语言)。 那个这个词的来源很可能是通过访问维基百科来回答的。
现代正则表达式引擎实现了所有这些花哨的前瞻、模式重新匹配和子表达式计数功能,嗯,它们正在识别一类作为常规语法超集的语法。 “经典”正则表达式以机械方式对应于称为“有限自动机”的理论机器。这本身就是一个非常有趣的主题。
【讨论】: