我正在尝试使用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中可用?
感谢所有帮助!!!
答案 0 :(得分:3)
你的问题是*贪婪。请尝试使用\$(.*?)\$
$ abc $ 12def $ def $$ 11 $ = $后跟0或更多[任何](在这种情况下恰好是abc $ 12def $ def $$ 11)后跟$
使用*?使正则表达式引擎尽快停止使用字符