正则表达式 – 如何有效地将输入字符串与多个正则表达式一次匹配
一个输入字符串如何有效地匹配任意数量的正则表达式?
一个可能有用的场景是REST Web服务.假设我已经提出了REST Web服务的公共接口的一些URL模式: > / user / with-id / {userId} 其中{…}被命名为占位符(如正则表达式捕获组).
可以假设占位符通常不会出现在模式的开头(但可以).还可以安全地假设任何字符串不可能匹配多个模式. 现在Web服务接收请求.当然,可以顺序匹配所请求的URI与一个URL模式,然后对下一个,依此类推;但是对于大量必须检查的模式,这可能不会很好地扩展. 有没有任何有效的算法呢? 输入: >输入字符串 输出: >输入字符串匹配的正则表达式(如果有).
Aho-Corasick algorithm是一种非常快速的算法,用于将输入字符串与一组模式(实际上是关键字)进行匹配,这些模式是预处理和组织在一个特里,以加速匹配.
支持正则表达式(即http://code.google.com/p/esmre/只是一个)的算法有不同之处,值得一看. 或者,您可以将块分割成块,将其组织在一棵树中,然后拆分网址以匹配一次一棵树. {userId}可以被认为是一个通配符,或者匹配一些特定格式(即为一个int). 当你到达一个叶子,你知道你匹配哪个url (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |