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

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

  •  
  •   thisisgpy · 229 天前 · 673 次点击
    这是一个创建于 229 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    \$\{(.*?)\}
    

    测试字符串为:

    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
        1
    c4f36e5766583218   229 天前
    http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/regex/Matcher.html#matches()
    当且仅当整个区域序列匹配此匹配器的模式时才返回 true。
        2
    iffi   229 天前
    这样子来
    ```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());
    }
    }
    ```
        3
    Defined   229 天前
    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));
    }
    }
        4
    mooncakejs   229 天前
    java 坑爹处就是 matches 从头匹配到尾
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2514 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 13:27 · PVG 21:27 · LAX 05:27 · JFK 08:27
    ♥ Do have faith in what you're doing.