【问题标题】:Multiple Pattern Match Algorithm多重模式匹配算法
【发布时间】:2016-06-02 08:54:39
【问题描述】:

我有很多日志,每条记录都包含一个 url。而且我有大约 2000 多个 url 模式来过滤日志。一些模式是具有可捕获组的规则模式。我想获取 url 和匹配的模式,如果可能的话,还想获取捕获的组。有没有java lib可以帮助我。或任何可以解决我的问题的算法。或任何其他与我的问题有关的东西。非常感谢。

【问题讨论】:

    标签: algorithm pattern-matching finite-automata


    【解决方案1】:

    看看 java 正则表达式库 (link)。

    您可以通过将原始模式与它们之间的| 连接起来来构造一个大模式(使用() 来指定您不只需要1 个字符)。

    正则表达式可以编译成高效的匹配有限自动机,您可以在数据上运行。只需确保编译一次并为每条记录重复使用它。

    它将处理提取组,但您需要以通用方式处理组(因为可以匹配任何组)。如果它更容易考虑使用命名组来简化处理。

    【讨论】:

    • 我还想获得完全匹配的模式或相关信息。我没有找到任何方法来支持这个 java 正则表达式库。
    • 使用命名组,或为您的模式分配一些生成的名称(即'pattern_0'、'pattern_1'...)。像这样定义它们 (?<name>X) 以匹配 X 和名称 name。然后当你得到结果时Mathcher.group("name")。您必须遍历您分配的名称并全部请求它们。对于与函数不匹配的组,将进行哈希查找并返回 null(会很快)。这不需要再次遍历输入字符串,因此它仍然比为每个模式使用单独的正则表达式要快得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多