【问题标题】:Is there a way to check if two regexps can match the same string? [duplicate]有没有办法检查两个正则表达式是否可以匹配相同的字符串? [复制]
【发布时间】:2013-02-10 12:58:42
【问题描述】:

我有两个正则表达式。我需要确定是否可以同时构建与这两个正则表达式匹配的给定长度的字符串。我需要算法来做到这一点。

字符串的长度不会超过 20 个字符。

【问题讨论】:

  • 别害羞。向我们展示 2 个正则表达式
  • 它是程序,所以这两个正则表达式在这个程序的每次运行中都会有所不同。
  • 如果你想构建一个字符串,如果你有两个正则表达式的 DFA,你可以执行以下操作:使用自动机的笛卡尔积并从通过图搜索算法将初始状态变为接受状态。
  • @frp,您的分配必须具有正则表达式约束,否则解决方案 - 尽管可能 - 将非常复杂(并且您提出问题的方式表明您不是在寻找完全符合 PCRE 的算法)
  • 第一个是通常的正则表达式(没有反向引用和 PCRE 的“硬特性”)。第二个可以简化为仅由点和字母组成。

标签: algorithm


【解决方案1】:

这取决于。对于 perl 兼容的正则表达式 (pcre),这通常是不可能的,因为它们已经完成:您甚至无法确定匹配总是终止。

对于乔姆斯基层次结构中定义的原始“干净”形式的正则语言,已知它们在交集下是封闭的,这已经在this thread 中讨论过。

只要你有交叉点的NFA,就很容易检查是否有任何字符串匹配它 - 如果thera是从你的NFA开始到结束的路径,那么这个路径的字符串就是您正在搜索的字符串,对于 DFA,给出了一个算法here,它应该很容易适应 NFA。

【讨论】:

猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多