2017-01-25 12 views
0

この文字列を指定すると、 "a001212a a1212a a00333a a00334a abvbv";文字列の3番目の数字を選択

正規表現を変更するだけで3番目の番号を選択しようとしています。しかし、私はそれを理解することはできません。私は正規表現だけを変更することが許されています。 matcher.group(2)に引数を変更してもグループ(1)ではなく、私のコードは動作します。

ヘルプ?

String nthNumber(String string) { 
     Pattern pat = Pattern.compile(
       "(\\D+0*(\\d+)\\D+){3,}.*" 
     ); 

     Matcher matcher = pat.matcher(string); 
     matcher.matches(); 
     return matcher.group(1); 
    } 
+1

'a001212a a1212a a00333a a00334a abvbv'とすると、期待される出力は何ですか? '1'、 '00333'、 '333'、または 'a00333a'? – Andreas

+0

グループ(1)はa00333aと一致していますか? 333とgroup(1)を一致させたい場合は、最初の '('を '(?)'と置き換えて非捕捉グループにしてください) – SlumpA

答えて

1

以下のように、最初のグループを非キャプチャグループにすることができます。その後、グループ(1)が動作するはずです。

String nthNumber(String string) { 
     Pattern pat = Pattern.compile(
       "(?:\\D+0*(\\d+)\\D+){3,}.*" 
     ); 

     Matcher matcher = pat.matcher(string); 
     matcher.matches(); 
     return matcher.group(1); 
    } 
+0

ありがとう! – user6388032

関連する問題