5

のような文字列がありますa1wwa1xxa1yya1zz

次の a1 が除外されるまで、a1 で始まるすべてのグループを取得したいと思います。(私の例では、 i は : a1wwa1xxa1yyおよびa1zz

私が使用する場合:

Matcher m = Pattern.compile("(a1.*?)a1").matcher("a1wwa1xxa1yya1zz");
while(m.find()) {
  String myGroup = m.group(1);
}

myGroup2グループごとに1グループをキャプチャします。
したがって、私の例では、 と のみをキャプチャできa1wwますa1yy

誰もが素晴らしいアイデアを持っていますか?

4

3 に答える 3

5

Split は良い解決策ですが、正規表現の世界に留まりたい場合は、次の解決策があります。

Matcher m = Pattern.compile("(a1.*?)(?=a1|$)").matcher("a1wwa1xxa1yya1zz");
while (m.find()) {
  String myGroup = m.group(1);
  System.out.println("> " + myGroup);
}

a1キャプチャの後に、または行末が続くことを確認するために、肯定的な先読みを使用しました。

先読みはゼロ幅のアサーションです。一致カーソルを進めずに条件を検証するため、検証した文字列は引き続きテストに使用できます。

于 2012-12-12T14:02:05.863 に答える
3

メソッドを使用split()して、分割された要素のプレフィックスとして「a1」を追加できます。

String str = "a1wwa1xxa1yya1zz";
String[] parts = str.split("a1");
String[] output = new String[parts.length - 1];

for (int i = 0; i < output.length; i++)
    output[i] = "a1" + parts[i + 1];

for (String p : output)
    System.out.println(p);

出力:

a1ww
a1xx
a1yy
a1zz
于 2012-12-12T13:50:00.393 に答える
0

次のようなアプローチを使用します。

    String str = "a1wwa1xxa1yya1zz";
    String[] parts = str.split("a1");
    for (int i = 1; i < parts.length; i++) {
        String found = "a1" + parts[i];
    }
于 2012-12-12T13:54:19.890 に答える