gpt4 book ai didi

长正则表达式的 Java 正则表达式性能

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:17 30 4
gpt4 key购买 nike

我想检查一组字符串是否包含一组单词。

String[] text = new String[10000];
text[0] = "John was killed in London";
text[1] = "Joe was murdered in New York";
....

String regex = "killed | killing | dead |murdered | beheaded | kidnapped | arrested | apprehended .....

我有一长串由 OR 运算符分隔的单词,如上所示,我想检查每个句子是否至少包含列表中的一个单词。

我知道如何使用 Pattern 和 Matcher。

我想知道的是以下方法中哪种方法对性能有好处,

  1. 在单个正则表达式中有一长串由 OR 运算符分隔的单词
  2. 有多个正则表达式(通过将列表分成 2 或 3 或?)并在不同的步骤中进行匹配

或者,有没有其他方法可以更快地做到这一点?

最佳答案

要了解其性能,您需要了解正则表达式的工作原理。它们比 Java 的“包含”复杂得多,在最坏的情况下,Java 的“包含”对于字符串的性能是二次方的。正则表达式编译成一个图形,您可以遍历输入字符串中的每个字符。这意味着,如果您有多个单词并构建了正确的正则表达式语句,那么如果您正确制作正则表达式或使用正则表达式优化器(例如 https://www.dcode.fr/regular-expression-simplificator),您可以获得更好的性能。我不确定 Java 是否开箱即用地优化了您的正则表达式。这是一个正确编译的正则表达式图的可视化示例。

enter image description here

关于长正则表达式的 Java 正则表达式性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27440155/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com