Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
其中哪一个性能更高,或者(如果等效)哪个读得更好?我正在尝试匹配一对括号内的所有内容。
Pattern p1 = Pattern.compile("\\([^)]*\\)"); Pattern p2 = Pattern.compile("\\(.*?\\)");
对我来说,第二个读起来更好,但使用了可能令人困惑的不情愿量词,我不确定这是否会导致性能损失。
编辑
不要错过表明这更好的答案:
Pattern p3 = Pattern.compile("\\([^)]*+\\)");
\([^)]*\)会更快,尽管如果输入很小则不明显。当您使用[^)]*所有格时,可能会获得更好的收益:[^)]*+。这样,正则表达式引擎将不会跟踪所有字符[^)]*匹配,以防它需要回溯(在 的情况下不会发生[^)]*\))。使模式具有所有格会导致正则表达式引擎不记得该模式匹配的字符。
\([^)]*\)
[^)]*
[^)]*+
[^)]*\)
同样,这可能并不明显,但是如果您的输入变大(r),我很确定*.*? and之间的差异[^)]*小于 and 之间[^)]*的差异[^)]*+。
.*?
*运行一些基准测试来确定!
p2与非贪婪方式相比,这种方式具有更好的性能,但会导致回溯。
p2
Pattern p1 = Pattern.compile("\\([^)]*\\)");
看看这篇文章。