2011-07-26 9 views
9

をキャプチャ、私は以下のような文字列があります。正規表現 - 全繰り返しグループに

@[email protected] text [email protected]@another optional text here etc 

内部@[email protected]文字列が含まれています。

私はこれらの "変数"をすべて1つの正規表現でグループ化したいと思っていますが、regexpが最後に取得したグループのみを返すので不可能です。

+0

'@。+ @'の代わりに '@ [^ @] + @'が必要な場合があります。 – sidyll

+0

正しいバージョンを入れるのを忘れました。 "@。+?@ –

答えて

17

あなたはそうです。ほとんどの正規表現の味(Javaが含まれています)は、繰り返しキャプチャするグループの個々のマッチへのアクセスを許可しません。 (Perl 6と.NETはこれを可能にしますが、それはあなたには役立ちません)。

他に何ができますか?

1で @[email protected]@[email protected]など1をキャプチャします
Pattern regex = Pattern.compile("@[^@][email protected]"); 
Matcher regexMatcher = regex.matcher(subjectString); 
while (regexMatcher.find()) { 
    // matched text: regexMatcher.group() 
    // match start: regexMatcher.start() 
    // match end: regexMatcher.end() 
} 

2

セパレータが@であることがわかっている場合は、splitメソッド(string.split('@'))を使用しないのはなぜですか。

+0

セパレータではありませんプロパティ/プレースホルダーの「タグ」の開始/終了 –

+0

その場合は、とにかく「分割」を実行できず、結果の配列をトラバースしてプロパティ名とオプションのテキストを取得できないのですか? –

+0

"@ property @ text"と "text @ property"です。Splitはあなたに["property"、 "text"]または["text"、property "]を与えます。 –

関連する問題