Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在matcher组中获取比预期更多的字符_Java_Regex - Fatal编程技术网

Java 正在matcher组中获取比预期更多的字符

Java 正在matcher组中获取比预期更多的字符,java,regex,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

我正在尝试根据模式匹配以下字符串:

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);
但它不起作用

有人能帮我吗?

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


您想了解(需要向下滚动一点)。

是否需要在java正则表达式中转义
~
s?
Matcher m = Pattern.compile("(.*)\\|VY\\~(.*?)\\~").matcher(s);