在matcher组中获得比预期更多的字符

时间:2012-09-10 19:21:27

标签: java regex

我正在尝试将以下字符串与模式匹配:

String s  = "AAA|VY~1055~ ~~BCN~09/24/2012~";
Matcher m = Pattern.compile("(.*)\\|VY\\~(.*)\\~").matcher(s);

if (m.find()) 
{
  String value = m.group(2);      
  System.out.print("value = " + value);
}

输出结果为:

value = 1055~ ~~BCN~09/24/2012

但我想要这个:

value = 1055

为什么直到字符串结尾才能获得所有字符?

我已经阅读了一些消费到字符串末尾的内容,我尝试过:

Matcher m = Pattern.compile("(.*)\\|VY\\~(.*)\\~(.*)").matcher(s);
Matcher m = Pattern.compile("(.*)\\|VY\\~(.*)\\~.*").matcher(s);

但它不起作用。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

使用*?(不情愿)量词,它是懒惰的(尽快停止匹配)。

Matcher m = Pattern.compile("(.*)\\|VY\\~(.*?)\\~").matcher(s);

答案 1 :(得分:0)

您想了解gready, reluctant and possessive quantifiers(需要向下滚动一下)。