Algorithm 有没有办法检查两个regexp是否可以匹配同一个字符串?

Algorithm 有没有办法检查两个regexp是否可以匹配同一个字符串?,algorithm,Algorithm,我有两个正则表达式。我需要确定是否有可能构建同时匹配这两个regexp的给定长度的字符串。我需要算法来做那件事 字符串的长度不会超过20个字符。视情况而定。对于perl兼容的正则表达式(pcre),这通常是不可能的,因为它们是图灵完整的:您甚至不能确保匹配总是终止 对于Chomsky层次结构中定义的reguler语言的原始“干净”形式,已知它们在交集下是闭合的,这已在中讨论过 一旦有了交叉点的字符串,就可以很容易地检查是否有任何字符串与之匹配-如果thera是从NFA的起点到终点的路径,那么该路

我有两个正则表达式。我需要确定是否有可能构建同时匹配这两个regexp的给定长度的字符串。我需要算法来做那件事


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

视情况而定。对于perl兼容的正则表达式(pcre),这通常是不可能的,因为它们是图灵完整的:您甚至不能确保匹配总是终止

对于Chomsky层次结构中定义的reguler语言的原始“干净”形式,已知它们在交集下是闭合的,这已在中讨论过


一旦有了交叉点的字符串,就可以很容易地检查是否有任何字符串与之匹配-如果thera是从NFA的起点到终点的路径,那么该路径的字符串就是您正在搜索的字符串,对于DFA,给出了一个算法,将其适配到NFA应该很简单。

这取决于具体情况。对于perl兼容的正则表达式(pcre),这通常是不可能的,因为它们是图灵完整的:您甚至不能确保匹配总是终止

对于Chomsky层次结构中定义的reguler语言的原始“干净”形式,已知它们在交集下是闭合的,这已在中讨论过


一旦有了交叉点的字符串,就可以很容易地检查是否有任何字符串与之匹配-如果thera是从NFA的开始到结束的路径,那么该路径的字符串就是您正在搜索的字符串,对于DFA,给出了一个算法,将其适配到NFA应该很简单。

不要害羞。向我们展示2 regexpsIt is程序,因此这两个regexp在该程序的每次运行中都是不同的。如果您想构建字符串,如果您有两个regex的DFA,您可以执行以下操作:使用自动机的笛卡尔积,通过图搜索算法搜索从初始状态到接受状态的路径。@fP,您的作业必须有regexp约束,否则解决方案(虽然可能)将相当复杂(您提问的方式表明您没有寻找完全兼容的算法)。第一个是常规regexp(没有反向引用和PCRE的“硬特性”)。第二个可以简化为只包含点和字母。不要害羞。向我们展示2 regexpsIt is程序,因此这两个regexp在该程序的每次运行中都是不同的。如果您想构建字符串,如果您有两个regex的DFA,您可以执行以下操作:使用自动机的笛卡尔积,通过图搜索算法搜索从初始状态到接受状态的路径。@fP,您的作业必须有regexp约束,否则解决方案(虽然可能)将相当复杂(您提问的方式表明您没有寻找完全兼容的算法)。第一个是常规regexp(没有反向引用和PCRE的“硬特性”)。第二个可以简化为仅包含点和字母。在C++中,对于DFA/NFA流的实际例子。C++中用于DFA/NFA流的实际例子。