假设我有几个正则表达式:
expr_1:“test_file”
expr_2:“test_*”
expr_3:“测试*”
所有这些都匹配字符串“test_file”。如何在程序中确定哪个规则是最严格的规则(在本例中为 expr_1 )?
我想要达到的目标:
我有一个适用于很多文件的一般规则,但对于 .jpeg 文件为例,我想做一个特殊的操作。例如,如何确定选择“.jpeg”文件的规则比“*”规则更严格?
编辑:我正在使用 Qt 中的 QRegExp,但这不应该改变任何东西。
假设我有几个正则表达式:
expr_1:“test_file”
expr_2:“test_*”
expr_3:“测试*”
所有这些都匹配字符串“test_file”。如何在程序中确定哪个规则是最严格的规则(在本例中为 expr_1 )?
我想要达到的目标:
我有一个适用于很多文件的一般规则,但对于 .jpeg 文件为例,我想做一个特殊的操作。例如,如何确定选择“.jpeg”文件的规则比“*”规则更严格?
编辑:我正在使用 Qt 中的 QRegExp,但这不应该改变任何东西。
这是基于语言理论解决该问题的正确方法:
计算作为所有其他正则表达式的“与”或“组合”的正则表达式。您可以将所有正则表达式转换为 DFA,然后您可以创建所有自动机的交集,这将为您提供一个新的 DFA,它只接受所有三个正则表达式都接受的东西。然后您还可以最小化自动机,并将其转换回正则表达式。如果你这样做,你将得到一个正则表达式,它与所有其他正则表达式一样具有限制性,并且是执行此操作的最短正则表达式。
解释如何做到这一切的好书:自动机理论、语言和计算简介
您使用什么语言?
“限制性”的一个很好的衡量标准可能是通过正则表达式运行一组潜在的字符串(在这种情况下是一堆文件名),并查看每个字符串匹配的数量。