当前位置: 首页 > 知识库问答 >
问题:

java正则表达式:性能和替代方案

陆栋
2023-03-14

最近,我不得不搜索许多字符串值,以查看哪一个匹配某个模式。在用户输入搜索项之前,字符串值的数量和模式本身都不清楚。问题是,每次我的应用程序运行以下行时,我都会注意到:

    if (stringValue.matches (rexExPattern))
    {
        // do something so simple
    }
    "A*B*C*D*E*F*"

共有1个答案

越望
2023-03-14

Java中的正则表达式被编译成内部数据结构。这个编译是一个耗时的过程。每次调用方法String.matches(String regex)时,将再次编译指定的正则表达式。

因此,您应该只编译一次正则表达式并重用它:

Pattern pattern = Pattern.compile(regexPattern);
for(String value : values) {
    Matcher matcher = pattern.matcher(value);
    if (matcher.matches()) {
        // your code here
    }
}
 类似资料:
  • 问题内容: 最近,我不得不搜索许多字符串值,以查看哪个字符串与某种模式匹配。在用户输入搜索词之前,字符串值的数量和模式本身都不清楚。问题是,我的应用程序每次运行以下行时,我都已注意到: 大约需要40微秒。不用说,当字符串值的数量超过几千个时,它会太慢。 该模式类似于: 这里的A〜F只是示例,但是模式类似于上面的东西。 请注意 模式实际上每次搜索都会改变。例如,“ A * B * C ”可以更改为W

  • 问题内容: 我正在尝试以的形式找到网页上的所有链接,或者我做了一个正则表达式,并且可以正常工作: 但是,有没有更短的写方法呢?我重复了:// [^ / \“] + /两次,可能没有必要。我尝试了各种方法,但是没有用。我尝试了: 很明显,我在这里缺少了一些东西,或者我只是对Python正则表达式不够了解。 问题答案: 您正在使用捕获组,并在使用捕获组时改变其行为(它只会返回捕获组的内容)。您的正则表

  • 问题内容: 我有这个字符串: 现在,我想在每个数字之前添加String num:。 因此结果必须是: 这也必须工作: 用于搜索数字的正则表达式是:[0-9]+ 但是我想用num:+ [匹配的子字符串]替换匹配的子字符串。 我现在写了一个带有数字的示例,但另一个示例可以是:在每个电子邮件地址之前添加 ·Email found·: 问题答案: 利用分组。您可以使用括号(并)定义组,并通过组索引$n在哪

  • 本文向大家介绍Java正则表达式的替换和分组功能,包括了Java正则表达式的替换和分组功能的使用技巧和注意事项,需要的朋友参考一下 前言 这篇来学习正则表达式的替换和分组功能,替换很好理解,分组有点复杂,特别是如何写有效的分组的正则表达式。这篇通过几个练习,简单了解下替换和分组功能。 1.替换功能 在String类有一个替换功能的方法,结合正则表达式去实现替换,下面是replaceAll()方法的

  • 问题内容: 这是一个在大多数正则表达式实现中都能正常工作的正则表达式: 这与.js匹配以.js结尾的字符串,但filename.js除外 Javascript没有后面的正则表达式。有谁能放在一起实现相同结果并可以在javascript中工作的替代正则表达式? 这里有一些想法,但需要帮助功能。 问题答案: 为我工作 经过测试: test.js match blabla.js match filena

  • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone