2011-10-30 3 views
1

正規表現でワイルドカードの一致部分を取得するにはどうすればよいですか?例えば

Pattern pattern = Pattern.compile("a(.*)b"); 
Matcher matcher = pattern.matcher("a19203b"); 
matcher.find(); 
System.out.println(matcher.group()); 

これは、文字列全体(a19203b)をプリントアウトします。私が必要なのは19203です。どうすればJavaでこれを手に入れることができますか?

(例えば、mod_rewriteのルールでは、私は$1は私が必要とする文字列ですRewriteRule article/(.*) article.php?id=$1ような何かをするだろう)

答えて

4

は解決策を見つけました。 matcher.group()の代わりにmatcher.group(1)を使用してください。

Pattern pattern = Pattern.compile("a(.*)b"); 
Matcher matcher = pattern.matcher("a19203b"); 
matcher.find(); 
System.out.println(matcher.group(1));
+0

真ですが、そのような副作用のためだけに 'find()'を呼び出さないでください。 'if'や' while'文の中では常にそれを呼び出す必要があります。その結果、実際に成功したかどうかを知ることができます。 –

1

使用lookbehinds /先読み:

Pattern regex = Pattern.compile("(?<=a).*(?=b)"); 

はあなたがキャプチャしたくないものをキャプチャしないでください。ここであなたの全体の試合はあなたが望むものになります。

関連する問題