2012-03-01 18 views
0

I持って、次の文字列Javaのパターンは、キャプチャグループを繰り返し

52x10x20x30x40 

文字列が同じパターンで拡張することができ、それの両側に他の文字列が存在します。例えば

"Hello something 52x10x20x30x40 bla bla bla" 

私はすべての2桁をキャプチャしたい。

I持って、次の正規表現

Pattern.compile("(\\d\\d)([x]\\d\\d)+"); 

しかし、私は唯一の次のグループを取得し、この正規表現と

1: 52 
2: x40 

答えて

4

なぜ単に:

"52x10x20x30x40".split("x"); 

両側に他の文字列があることを忘れてしまいました。

"\\d{2}(x\\d{2})+"を検索し、split("x")を試合に使用できます。

+0

両側に他の文字列があることを忘れてしまった – Jonas

+0

@Jonas:\\ d {2}(x \\ d {2})を検索できます+ "'を使い、 'split()'をマッチで使用します。 – NPE

0

Regexは可変グループの長さをサポートしていません。

代わりに分割方法を使用してください。 GuavaさんSplitter:あなたはちょうどあなたがこの表現を使うことができ、すべて2桁の番号をキャプチャしたい場合

Iterable<String> tokens = Splitter.on('x').split(str); 
+0

両側に他の文字列があるかもしれないことを忘れた – Jonas

+0

@Jonasそれで最初にそれらを取り除かなければならないでしょう。おそらく、最初にパターン '(\\ d \\ d)(([x] \\ d \\ d)+)'を検索し、 'matcher.group()'を分割します。 –

0

(?<!\d)(\d\d)(?!\d) 

通常あなただけ繰り返しキャプチャグループが一致した最後の部分文字列を取得することができます。 (.NET正規表現はこの点で異なります)