Java:使用Pattern类获取组名?

时间:2011-09-29 00:05:09

标签: java regex

我正在尝试使用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中可用?

感谢所有帮助!!!

1 个答案:

答案 0 :(得分:3)

你的问题是*贪婪。请尝试使用\$(.*?)\$

$ abc $ 12def $ def $$ 11 $ = $后跟0或更多[任何](在这种情况下恰好是abc $ 12def $ def $$ 11)后跟$

使用*?使正则表达式引擎尽快停止使用字符