java - 将以下内容与正则表达式匹配

标签 java regex

我需要将以下字符串与Java中的正则表达式进行匹配:

Hello: ${firstName} ${lastName}

得到这个:

${firstName}

${lastName}

我尝试过这个:

@Test
    public void testRegexMatch() {
        String regex = Pattern.quote("${") + ".+" + Pattern.quote("}");
        String str = "Hello: ${firstName} ${lastName}";
        Matcher m = Pattern.compile(regex).matcher(str);
        while (m.find()) {
            System.out.println(str.substring(m.start(), m.end()));
        }
    }

但是我得到了以下输出:

${firstName} ${lastName}

最佳答案

尝试将 .+ 替换为 [^\}]+。它将匹配尽可能多的非 } 字符。

还需要注意的是,此方法优于使用非贪婪量词 .+?,因为这将在没有任何回溯的情况下进行匹配,而非贪婪版本将每个字符回溯一次括号内。在这种情况下,您可能不会注意到性能受到影响,但养成编写尽可能最有效的正则表达式的习惯非常重要

关于java - 将以下内容与正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7838919/

相关文章:

java - EJB 计时器忽略 TransactionTimeout

java - 接口(interface)方法 - 实现与定义

尝试使用 pdfrenderer 将 pdf 页面解析为图像时出现 java.lang.NoClassDefFoundError : java. awt.geom.Rectangle2D$Double

java - "hangs"上的 FTP 连接 "LIST"

Python re.sub 和 re.match 不匹配?

python - 如何在 Python 中跳过匹配模式的行?

javascript - 从 JavaScript 中的字符串中提取所有数字

java - 从 Activity 外部捕获 onRequestPermissionsResult()

sql - 解释意外的 regexp_replace 结果

javascript - 正则表达式匹配 cookie 值并删除连字符