regex 在Java中使用Pattern类获取组值?

x6492ojm  于 2023-06-07  发布在  Java
关注(0)|答案(1)|浏览(189)

我尝试使用Pattern和Matcher类从字符串中提取匹配项。
我的字符串如下:$abc$12def$def$$11$
我想从这个字符串中得到$abc$$def$$11$
我想到了使用下面的正则表达式:\$(.*)\$(在正常模式匹配中可以正常工作)。
我的Java程序无法得到这些。它返回给我的是整个字符串。以下是我的程序:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public final class dollar {

  private static String REGEX = "\\$(.*)\\$";

  private static String INPUT = "$12f$$555$button button$abc0$";

  public static void main(String[] args) {
    Pattern p = Pattern.compile(REGEX);
    Matcher m = p.matcher(INPUT); // get a matcher object
    boolean found = m.find();
    while (found) {
      System.out.println("TEST:" + m.start());
      System.out.println("TEST:" + m.end());
      found = m.find();
    }
  }
}

我还尝试了以下方法:

m.matches()
m.groupCount()
m.group(1)
m.group(2)

但这也不起作用。如何做到这一点?它可以在jdk6上完成吗?或者在jdk7中可以使用?

sirbozc5

sirbozc51#

你的问题是 * 很贪婪。尝试\$(.*?)\$代替
$abc$12def$def$11 $ = $后跟0或更多[任何](在本例中恰好是abc$12def$def$11)后跟$
使用 *?使正则表达式引擎尽早停止使用字符

相关问题