这个article表示Java中的正则表达式匹配很慢,因为带有“后向引用”的正则表达式无法高效匹配。本文解释了高效 Thomson的基于NFA的匹配算法(发明于1968年),该算法适用于regexps ,无需“后向引用”。但是Pattern
javadoc表示Java regexp使用基于NFA的方法。
现在我想知道Java regexp匹配的效率如何以及它使用的算法。
答案 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);
}
}