Регулярное выражение соответствует многострочному примеру - Java

Регулярное выражение соответствует многострочному примеру - Java

По умолчанию "." не соответствует разрывам строки. Чтобы сопоставить несколько строк, добавьте префикс (? S) или включите флаг Pattern.DOTALL.

1. пример

Пример адреса, нам нужно извлечь только «Адрес 1».

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

Failed :
Чтобы извлечь «Адрес 1», этот шаблон ничего не вернет, «.» не соответствует нескольким строкам.

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

Correct :
Чтобы извлечь «Адрес 1», добавьте префикс (? s).

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

Или включите режим Pattern.DOTALL.

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

2. Пример RegEx

Пример использования регулярного выражения, совпадающего с несколькими строками, для получения «адреса 1».

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;
    }

}

Выход

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
]