gpt4 book ai didi

php - 正则表达式碰撞检测

转载 作者:可可西里 更新时间:2023-10-31 23:40:11 24 4
gpt4 key购买 nike

假设两个正则表达式 e1e2 碰撞 如果存在任何字符串 s,这样e1e2 都匹配 s

有没有简单(有效)的方法来检查两个正则表达式是否冲突,而无需遍历字典中所有可能字符串的集合?

注1:我不知道在文献中是否以其他方式调用它。也许我只是缺少合适的名称来搜索它。

注意 2: 对我来说理想的答案是编写 PHP 代码,但我接受任何建议,不一定是 PHP。

最佳答案

所以,经过进一步研究,这似乎是文献中称为正则表达式交集

这是可能的,显然也不难实现,但似乎没有正式的 PHP 支持。

实现简单算法的关键在于将正则表达式转换为有限自动机。阅读附加链接以更好地了解解决方案。

Stackoverflow相关问题:

Intersection of two regular expressions

Calculate if two infinite regex solution sets don't intersect

PHP 的非官方库:

https://github.com/KendallHopkins/FormalTheory

编辑:添加代码片段以使用 Kendall Hopkins 库检查交叉点:

function doRegexIntersection($regex_string_1, $regex_string_2) {
$lexer = new FormalTheory_RegularExpression_Lexer();
$nfa1 = $lexer->lex( $regex_string_1 )->getNFA();
$nfa2 = $lexer->lex( $regex_string_2 )->getNFA();
return FormalTheory_FiniteAutomata::intersection( $nfa1, $nfa2 )->validSolutionExists();
}

关于php - 正则表达式碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com