V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
thisisgpy
V2EX  ›  问与答

关于一个正则表达式在 Java 里面匹配不到的奇怪问题

  •  
  •   thisisgpy · 2019-04-30 10:10:22 +08:00 · 2199 次点击
    这是一个创建于 2020 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我需要匹配一行字符串里面所有的 ${} 占位符,使用的正则表达式为

    \$\{(.*?)\}
    

    测试字符串为:

    hello, ${name}. Your level is ${level}
    

    我用 OSChina 的在线正则表达式测试工具 http://tool.oschina.net/regex/ 进行测试,可以正确匹配到两个占位符。

    但是我在 Java 里面就不能匹配到。

    Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}");
    String test = "hello, ${name}. Your level is ${level}";
    Matcher matcher = pattern.matcher(test);
    System.out.println(matcher.matches()); // 输出 false
    

    求教这是怎么回事~~懵逼了一早上

    4 条回复    2019-04-30 14:10:01 +08:00
    c4f36e5766583218
        1
    c4f36e5766583218  
       2019-04-30 12:26:49 +08:00
    http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/regex/Matcher.html#matches()
    当且仅当整个区域序列匹配此匹配器的模式时才返回 true。
    iffi
        2
    iffi  
       2019-04-30 12:32:39 +08:00
    这样子来
    ```public static void main(String[] args) {
    Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}");
    String test = "hello, ${name}. Your level is ${level}";
    Matcher matcher = pattern.matcher(test);
    while (matcher.find()) {
    System.out.println(matcher.group());
    }
    }
    ```
    Defined
        3
    Defined  
       2019-04-30 13:49:51 +08:00
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    final String regex = "\\$\\{(.*?)\\}";
    final String string = "hello, ${name}. Your level is ${level}\n";

    final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
    final Matcher matcher = pattern.matcher(string);

    while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
    System.out.println("Group " + i + ": " + matcher.group(i));
    }
    }
    mooncakejs
        4
    mooncakejs  
       2019-04-30 14:10:01 +08:00
    java 坑爹处就是 matches 从头匹配到尾
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1128 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:40 · PVG 07:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.