Regulärer Ausdruck entspricht mehrzeiligem Beispiel - Java

Regulärer Ausdruck entspricht mehrzeiligem Beispiel - Java

Standardmäßig ist das "." stimmt nicht mit Zeilenumbrüchen überein. Um mehrere Zeilen abzugleichen, fügen Sie das Präfix (? S) hinzu oder aktivieren Sie das Flag Pattern.DOTALL.

1. Beispiel

Als Adressbeispiel müssen wir nur die "Adresse 1" extrahieren.

Starting...
Address 1: 88 app 2/8
    superman taman, puchong
    36100, Malaysia
Address 2: abc
End

Failed :
Um "Adresse 1" zu extrahieren, gibt dieses Muster nichts zurück, das "." stimmt nicht mit mehreren Zeilen überein.

Address 1:\\s(.*)Address 2:

Correct :
Um "Adresse 1" zu extrahieren, fügen Sie das Präfix (? s) hinzu.

(?s)Address 1:\\s(.*)Address 2:

Oder aktivieren Sie den Pattern.DOTALL-Modus.

Pattern.compile(Address 1:\\s(.*)Address 2:, Pattern.DOTALL);

2. RegEx Beispiel

Beispiel für die Verwendung mehrerer übereinstimmender Regex-Zeilen, um die „Adresse 1“ zu erhalten.

package com.example.regex

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RunExampleTest{

    private Pattern addressPattern = Pattern.compile(ADDRESS_PATTERN);
    private Matcher matcher;

    //Alternative
    /*private Pattern addressPattern =
        Pattern.compile(ADDRESS_PATTERN, Pattern.DOTALL);*/

    private static final String ADDRESS_PATTERN = "(?s)Address 1:\\s(.*)Address 2:";

    public static void main(String[] args) {

        String data = "Testing... \n" +
            "Address 1: 88 app 2/8\n" +
            "superman taman, puchong\n" +
            "36100, Malaysia\n" +
            "Address 2: abc" +
            "testing end";

        RunExampleTest obj = new RunExampleTest();
        List list = obj.getAddress(data);

        System.out.println("Test Data : ");
        System.out.println(data + "\n");

        System.out.println("Address Resut : " + list);

    }

    private List getAddress(String data){

        List result = new ArrayList();

        matcher = addressPattern.matcher(data);

        while (matcher.find()) {
            result.add(matcher.group(1));
        }

        return result;
    }

}

Ausgabe

Test Data :
Testing...
Address 1: 88 app 2/8
superman taman, puchong
47100, Malaysia
Address 2: abctesting end

Result : [88 app 2/8
superman taman, puchong
47100, Malaysia
]