-2

この正規表現を使用して、次のような文字列を解析しています"CALENDAR YEAR: 2012"。誰かがより良いものを提案できますか? そして、私は matcher.find() を使いたい (CALENDAR YEAR:\\s+)?((2\\d\\d\\d))

2012年はグループで取りたいです。

これを行うとnullが出力される理由がわかりません:

 while (myMatcher.find()) {
     System.out.println(myMatcher.group(1));
     System.out.println(myMatcher.group(2));

    }



CALENDAR YEAR: 
2012
null
null

編集:コードが一致を使用していて、文字列から年を解析したい場合、式をどのように変更しますか?

4

2 に答える 2

0

REGEXP マニュアルを読んでください。

明らかに、その?キャラクターをいつ使用し、いつ使用しないかはわかりません。またはいつ使用する()か...

そのままにしておくことができます。

CALENDAR YEAR:\s+(\d{4})

すでにトリックを行う必要があります。しかし、さまざまな例を見る代わりに、ランダムな文字を正規表現に投げ込んだだけです。

于 2012-11-15T20:32:24.177 に答える
0

余分なグループを使用する必要はまったくありません-正規表現パターンを使用してください

(?<=CALENDAR YEAR: )2\\d{3}(?!\\d)

...そして結果は

myMatcher.group(0)
于 2012-11-15T21:11:45.753 に答える