如何高效地将一个输入字符串与任意数量的正则表达式匹配?其中一个可能有用的场景是 REST Web 服务。假设我为 REST Web 服务的公共接口想出了许多 URL 模式:
/user/with-id/
{userId}
/user/with-id/
{userId}
/profile
/user/with-id/
{userId}
/preferences
/users
/users/who-signed-up-on/
{date}
/users/who-signed-up-between/
{fromDate}
/and/
{toDate}
- …
这里的{...}
是指具有命名占位符(类似于正则表达式捕获组)的位置。可以假设这些命名占位符通常不会出现在模式的开头(但它们可能会)。也可以安全地假定任何字符串都不可能匹配多个模式。
现在,Web 服务收到请求。可以逐个将请求的 URI 与一个 URL 模式进行匹配,然后再与下一个进行匹配,以此类推;但对于必须检查的更多模式来说,这可能不会很好地扩展。
有没有有效的算法可以解决这个问题?
输入:
- 一个输入字符串
- 一组“互斥”的正则表达式(即任何输入字符串都不能匹配超过一个表达式)
输出:
- 输入字符串匹配的正则表达式(如果有)。