我有许多由用户提供的正则表达式,并选择其中一个与输入字符串匹配的正则表达式。现在,如果有多个表达式匹配,我想选择最具体的表达式,即最不明确的表达式。
更具体地说:我正在用几个人用Python编写一个IRC机器人。可以通过正则表达式注册命令,其中某些命令会重叠。可以为每个命令提供某种优先级,但是这会引入另一个故障点。我希望基于提供的正则表达式的歧义性,是否可以在命令注册时自动生成某种“分数”。我还无法在Google上找到合适的算法。
一种天真的方法可能会满足我现在的需要,它可能是正则表达式中字符与通配符的比率,但是,如果您了解此处的任何具体算法,我将很感兴趣。
答案 0 :(得分:2)
如果使用可以转换为DFA的grep样式正则表达式,则对于任何正则表达式,都可以计算出随机字符串与之匹配的概率。
对于您要寻找的分数类型,我认为这是一个合理的选择-随机字符串匹配的可能性越低,则正则表达式越具体。为了加分,您对“随机字符串”的概念可以模拟人们实际键入的各种字符串。
这并不容易,但是可行。该过程将如下所示:
步骤(4)将为随机字符串进入接受状态分配概率,这是随机字符串与正则表达式匹配的概率。此概率越低,则正则表达式越具体。