Java中的正则表达式匹配算法

时间:2013-10-08 15:03:41

标签: java regex algorithm

这个article表示Java中的正则表达式匹配很慢,因为带有“后向引用”的正则表达式无法高效匹配。本文解释了高效 Thomson的基于NFA的匹配算法(发明于1968年),该算法适用于regexps ,无需“后向引用”。但是Pattern javadoc表示Java regexp使用基于NFA的方法。

现在我想知道Java regexp匹配的效率如何以及它使用的算法。

1 个答案:

答案 0 :(得分:1)

java.util.regex.Pattern使用Boyer-Moore字符串搜索算法

/* Attempts to match a slice in the input using the Boyer-Moore string
 * matching algorithm. The algorithm is based on the idea that the
 * pattern can be shifted farther ahead in the search text if it is
 * matched right to left.
 */

private void compile() {
    ----------------------
    -----------------------

   if (matchRoot instanceof Slice) {
        root = BnM.optimize(matchRoot);
        if (root == matchRoot) {
            root = hasSupplementary ? new StartS(matchRoot) : new Start(matchRoot);
        }
    } else if (matchRoot instanceof Begin || matchRoot instanceof First) {
        root = matchRoot;
    } else {
        root = hasSupplementary ? new StartS(matchRoot) : new Start(matchRoot);
    }
}