0

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

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);

但它不起作用。

有谁能够帮我?

4

2 回答 2

2

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

Matcher m = Pattern.compile("(.*)\\|VY\\~(.*?)\\~").matcher(s);
于 2012-09-10T19:24:50.970 回答
0

您想了解贪婪、不情愿和所有格的量词(需要向下滚动一点)。

于 2012-09-10T19:26:53.357 回答