【问题标题】:Comparing two regular expressions for strict-ness?比较两个正则表达式的严格性?
【发布时间】:2011-06-01 19:52:19
【问题描述】:

一般来说,有没有一种快速的方法来比较两个正则表达式并确定两者中哪一个更严格?即,有两个正则表达式 A 和 B,如果每个匹配 A 的字符串也匹配 B,A 比 B 更严格。

【问题讨论】:

  • 通过“快速”,您是要求一个函数来有效地计算正则表达式严格性,还是要求一种通过查看它们来评估其严格性的方法?
  • 本质上,我想比较两个匹配给定字符串的正则表达式,并判断其中哪个正则表达式更严格,所以我猜是后者。
  • 已经对用于确定严格性的语法导向算法进行了大量研究,这可能是您想要的,尽管标准算法首先从正则表达式转换为 NFA 并且效率低下。

标签: ruby regex perl


【解决方案1】:

虽然理论上有一些算法可以让你做这些事情,但由于以下几个原因,将它们应用到 Ruby 上会很困难:

  1. Ruby 没有将这些功能作为内置函数提供,因为 Ruby 的正则表达式的目标是匹配文本,而不是执行有限状态自动机的理论操作。
  2. Ruby 不会公开其正则表达式的内部结构以供您运行自己的算法。 (虽然您可以使用inspect 来获取正则表达式的原始形式,但您必须自己解析它才能对正则表达式进行任何分析。)
  3. Ruby 的正则表达式不是“真正的”正则表达式。多亏了与捕获组一起使用的反向引用,它们可以识别正则语言的超集(尽管它只是上下文无关语言的一个子集),因此该理论与 Ruby 正则表达式的功能无法完美匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多