最严格的正则表达式

时间:2012-07-16 17:44:05

标签: regex

假设我有几个正则表达式:

expr_1:“test_file”

expr_2:“test _ *”

expr_3:“test *”

所有这些匹配字符串“test_file”。如何在程序中找出哪个规则是最严格的规则(在本例中为expr_1)?

我想要实现的目标:

我有一个适用于很多文件的一般规则,但是对于.jpeg文件的例子,我想做一个特殊的操作。如何判断选择“.jpeg”文件的规则比“*”规则更具限制性?例如?

编辑: 我正在使用Qt的QRegExp,但这不应该改变任何东西。

2 个答案:

答案 0 :(得分:2)

这是基于语言理论解决问题的正确方法:

计算所有其他正则表达式的“和”或“组合”的正则表达式。 您可以将所有正则表达式转换为DFA,然后您可以创建所有自动机的交集,这将为您提供一个新的DFA,它只接受所有三个正则表达式都接受的内容。然后你也可以最小化自动机,并将其转换回正则表达式。如果你这样做,你将获得一个与所有其他正则表达式一样具有限制性的正则表达式,并且这是最短的正则表达式。

很好的书,解释了如何做到这一切:Introduction to Automata Theory, Languages, and Computation

答案 1 :(得分:0)

您使用的是哪种语言?

衡量"限制性的一个很好的衡量标准"可能是通过正则表达式运行一个潜在字符串数组(在这种情况下,一堆文件名),看看每个字符串匹配多少。