哪一个更高效,或者(如果等效)哪个更好?我试图匹配一对括号内的所有内容。
Pattern p1 = Pattern.compile("\\([^)]*\\)");
Pattern p2 = Pattern.compile("\\(.*?\\)");
对我来说,第二个读取更好,但使用可能令人困惑的不情愿的量词,我不确定这是否会导致性能损失。
修改
不要错过表明这更好的答案:
Pattern p3 = Pattern.compile("\\([^)]*+\\)");
答案 0 :(得分:4)
\([^)]*\)
会更快,尽管不会引人注意。当您[^)]*
占有:[^)]*+
时,可能会获得更好的收益。这样,正则表达式引擎将无法跟踪所有字符[^)]*
匹配,以防它需要回溯(在[^)]*\)
的情况下不会发生)。使模式占有性导致正则表达式引擎不记住此模式匹配的字符。
同样,这可能不明显,但如果您的输入变大(r),我很确定 * .*?
和[^)]*
之间的差异较小而不是[^)]*
和[^)]*+
之间。
* 运行一些基准来确定!
答案 1 :(得分:3)