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