-1

次のような入力文字列があります

hello world , How alan_613 are you roma_222 all doing alan_611 ?

alan_613正規表現を使用してandを解析しalan_611、1 つの配列roma_222に格納し、別の String 配列に格納したいと考えています。

現在、次を使用して3つの文字列の存在を解析および確認できます

String re1 = ".*?";
        String re2 = " ( alan| roma)";
        String re3 = "(_)";
        String re4 = "(\\d+)";

        Pattern p = Pattern.compile(re2 + re3 + re4, Pattern.CASE_INSENSITIVE
                | Pattern.DOTALL);
        Matcher m = p.matcher(input);

しかし、1 回のパスで 2 つの一致を使用せずに、それらを 2 つの配列にグループ化するにはどうすればよいでしょうか?

4

1 に答える 1

2

2 つの別々のパスでこれを行う必要があります。各パスは、関心のある値を探します

パス 1:(?<=\s|^)(alan)(_)(\d+)

パス 2:(?<=\s|^)(roma)(_)(\d+)



でも

2 パス ソリューションを使用せずにこれを行う方法を知りたいと思っていました。各一致を個別のキャプチャ グループに配置する式を使用できるのが最善ですが、これはもっと面倒だと思います。

(?<=\s|^)(?=alan|roma)(alan)?(roma)?(_)(\d+) Live Demo

ここに画像の説明を入力

サンプルテキスト

How alan_613 are you roma_222 all doing alan_611 

マッチ

この例では、キャプチャ グループ 1 が alan を取得する方法、またはキャプチャ グループ 2 が roma を取得する方法に注意してください。

[0][0] = alan_613
[0][1] = alan
[0][2] = 
[0][3] = _
[0][4] = 613

[1][0] = roma_222
[1][1] = 
[1][2] = roma
[1][3] = _
[1][4] = 222

[2][0] = alan_611
[2][1] = alan
[2][2] = 
[2][3] = _
[2][4] = 611
于 2013-08-30T14:04:16.343 に答える