2017-02-28 7 views
3

をキャプチャ、私はこの記事What is a non-capturing group? What does a question mark followed by a colon (?:) mean?非グループのJava正規表現

を見て、私は次のように働くと考えましたが、それは...

私は"Game No : 432543254 \n"

Pattern p = Pattern.compile("(?:Game No :)[0-9]*?(\n)"); 
Matcher m = p.matcher(curr); 
m.find(); 
System.out.print(m.group()); 

文字列を持っていませんしかし、上記のコードでは、文字列全体が表示されるだけです。

+1

あなたがそれを伝えているので、文字列全体が表示されます。 'm.group()'はマッチ全体を参照します。一致したテキストの一部だけに興味がある場合は、キャプチャグループを使用します(例: 'Game No:([0-9] *)'と 'print(m.group(1))'の順である。 –

+0

'Game No'が非捕獲グループにあるからといって、それがマッチの一部ではないということだけではありません。あなたはそれをマッチから除外したいと思っているなら、あなたは欲しいものです。 – Gerrit0

+0

数字のみを印刷すると思われる理由は何ですか? – Pshemo

答えて

2

非キャプチャグループはありませんキャプチャが、まだ文字列と一致します。また、あなたのパターンに数字と改行の間にスペースがあるので、それは一致しません。

数字を取得するには、このように、桁のマッチングパターンの周りのキャプチャグループを使用します。

Pattern p = Pattern.compile("Game No : ([0-9]+)"); 
Matcher m = p.matcher(curr); 
if (m.find()) { 
    System.out.print(m.group(1)); 
} 

Java demo

を参照するか、ただで分割する非正規表現のソリューションを使用します:とし、結果の配列の2番目の項目を取得してトリムします。

+1

ありがとうございました –