90341


以下の「リソース」から「やりたい処理結果」のように文字列を分割する方法が分かりません。  
行の先頭の`^\d+\.`を区切り文字にして文字列を分割したい感じになります。

正規表現実行環境は`Java`になります。

**リソース**

[code]

    1.ああああああああああああ
    2.いいいいいいいいいいいいい
    3.うううううううううううううううう
    ええええええええ6.jpgええええええ
    おおおおおおおおおおおおおお
    4.あああああああああ
    ああああああああああああああ
    あああああ6.70.ああああ
    
[/code]

**やりたい処理結果**  
上記テキストをこのような感じで分割したいです。  
（段落ごとに複数行のテキストを分ける感じで）  
段落の判定は「行の先頭が数字なおかつ、数字の次がドット」  
つまり、`^\d+\.`

[code]

    1.ああああああああああああ
    
[/code]

[code]

    2.いいいいいいいいいいいいい
    
[/code]

[code]

    3.うううううううううううううううう
    ええええええええ6.jpgええええええ
    おおおおおおおおおおおおおお
    
[/code]

[code]

    4.あああああああああ
    ああああああああああああああ
    あああああ6.70.ああああ
    
[/code]


CC BY-SA 4.0
2022-08-01T03:14:28.403
90301
2022-08-02T17:55:42.127
2022-08-02T17:55:42.127
10346
10346
question
java 正規表現 kotlin
特定の文字列が登場するまでヒットする正規表現


[単一行モード(`DOTALL`)](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/regex/Pattern.html#DOTALL)で改行も`*`にマッチするようにした上で、先読み(`(?=パターン)`)を利用すれば実現できるかと考えます。

[code]

    String resource = """
            1.ああああああああああああ
            2.いいいいいいいいいいいいい
            3.うううううううううううううううう
            ええええええええ6.jpgええええええ
            おおおおおおおおおおおおおお
            4.あああああああああ
            ああああああああああああああ
            あああああ6.70.ああああ
            """;
    
    Pattern pattern = Pattern.compile("(?:^|\\n)(\\d+\\..*?)(?=\\n\\d+\\.|\\n$)", Pattern.DOTALL);
    Matcher matcher = pattern.matcher(resource);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
        System.out.println();
    }
    
[/code]


CC BY-SA 4.0
2022-08-02T12:56:16.983
90341
2022-08-02T12:56:16.983
2808
90301
answer