あなたは
(?m)^(:\d{2}[A-Z]?:)(.*(?:\r?\n(?!:\d{2}[A-Z]?:).*)*)
がを参照してください使用することができます。 はを使用しないでください。Pattern.DOTALL
を使用してください。
詳細
(?m)^
- グループ1 - ライン
(:\d{2}[A-Z]?:)
の開始と一致する:
:
- コロン
\d{2}
から2桁
[A-Z]?
を - 1または0大文字のASCII文字
:
- コロン
(.*(?:\r?\n(?!:\d{2}[A-Z]?:).*)*)
- グループ2:
.*
- ゼロ - 行(改行文字以外の0以上の文字)
(?:\r?\n(?!:\d{2}[A-Z]?:).*)*
の残りの部分またはそれ以上のシーケンス:
\r?\n(?!:\d{2}[A-Z]?:)
- 改行(Java 8では\r?\n
である必要があります)グループ1
.*
に使用されるようなパターンに従っていないこと)\R
に置き換え -
Javaでは
は、使用行の残り
String pat = "(?m)^(:\\d{2}[A-Z]?:)(.*(?:\r?\n(?!:\\d{2}[A-Z]?:).*)*)";
参照してください。 Java demo:
String s = ":33: 88 app 2/8\nsuperman taman, puchong\n36100, Malaysia\n:22: bla bla \\bla /bla\nbla bla\n:32: 45//dsfd//qdsfqsdf\n:72D: Example";
Pattern pattern = Pattern.compile("(?m)^(:\\d{2}[A-Z]?:)(.*(?:\r?\n(?!:\\d{2}[A-Z]?:).*)*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println("--- NEXT PAIR ---");
System.out.println("Key:" + matcher.group(1));
System.out.println("Value:" + matcher.group(2));
}
出力:
--- NEXT PAIR ---
Key::33:
Value: 88 app 2/8
superman taman, puchong
36100, Malaysia
--- NEXT PAIR ---
Key::22:
Value: bla bla \bla /bla
bla bla
--- NEXT PAIR ---
Key::32:
Value: 45//dsfd//qdsfqsdf
--- NEXT PAIR ---
Key::72D:
Value: Example
使用[ '^([0-9] {2} [AZ]:?)(。*)'](https://regex101.com/r/QXKDfT/1 )を 'Pattern.MULTILINE'修飾子で置き換えます。 – anubhava