Django Web框架使用正则表达式来分派传入的请求 假设应用程序非常庞大,并且有很多正则表达式,比如数百个。
对于任何传入请求,如何确定哪些正则表达式尽快匹配?迭代遍历列出的正则表达式是疯狂的。
答案 0 :(得分:5)
一种选择是构造一个可以并行匹配所有正则表达式的确定性自动机。一种方法是:
现在,无论何时收到新消息,您都可以在该消息上运行表驱动的DFA,它有效地并行运行每个正则表达式,并返回哪些正则表达式(如果有)匹配。这可能会在内存中花费很大,因为生成的DFA可能非常大,但匹配任何传入正则表达式的时间与字符串大小呈线性关系。
答案 1 :(得分:0)
如果您可以控制应用程序,为什么不包含一些指示要使用的正则表达式类型的元数据?您可以使用该元数据然后选择正确的RegEx。
答案 2 :(得分:0)
通过将正则表达式与|连接在一起,将它们合并为一个和命名组:(?< 1> regex1)|(?2 regex2)|(?3 regex3 ...
测试输入一次,并通过检查命名组来确定匹配的正则表达式。