3

我正在考虑一个路由系统。想象一下我有以下两个正则表达式

  • pathpart1/pathpart2 => 路由到控制器 1 的特定匹配
  • .*=> 捕获所有路由到控制器 2

我让它们匹配一个 URL,例如“pathpart1/pathpart2”。

它们都匹配,但我想对第一个正则表达式的特定匹配进行流行。有没有办法看到第一个正则表达式非常具体(所以我想使用那个匹配)而第二个完全不具体(所以一个匹配基本上是万不得已的最后手段)......?

我不知道哪些路由已注册到路由器,所以我不能按特定顺序循环它们(即首先是特定的,如果所有其他路由都不匹配,则最后是全部)。

4

1 回答 1

3

换句话说,您正在寻找一种方法来确定正则表达式范围的基数。这不是一项简单的任务。例如,考虑最明显的复杂性:当涉及量词*和时+,显然基数在任何一种情况下都是∞。但在我们的直觉中,一些无穷大似乎比其他无穷大,所以我们觉得好像我们应该能够对包含这些无穷大量词的各种正则表达式进行排序。

我认为你必须要么(1)考虑一个不需要按特异性对正则表达式进行排序的替代设置要么(2)考虑一个粗略的近似,例如只有两个“类”的正则表达式:那些一个或多个无限量词(未转义*+不在方括号内),以及那些没有。

不是说没有希望!也可以尝试在cs.stackexchange.com上发布这个问题。

于 2013-03-25T14:57:13.043 回答