我尝试使用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条答案
按热度按时间sirbozc51#
你的问题是 * 很贪婪。尝试
\$(.*?)\$
代替$abc$12def$def$11 $ = $后跟0或更多[任何](在本例中恰好是abc$12def$def$11)后跟$
使用 *?使正则表达式引擎尽早停止使用字符