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 に答える