L’expression régulière correspond à l’exemple sur plusieurs lignes - Java

L'expression régulière correspond à l'exemple de plusieurs lignes - Java

Par défaut, le "." ne correspond pas aux sauts de ligne. Pour faire correspondre plusieurs lignes, ajoutez le (s) préfixe ou activez l'indicateur Pattern.DOTALL.

1. Exemple

Un exemple d'adresse, nous devons extraire uniquement l '«adresse 1».

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

Failed :
Pour extraire «Adresse 1», ce modèle ne retournera rien, le «.» ne correspond pas à plusieurs lignes.

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

Correct :
Pour extraire «Adresse 1», ajoutez le préfixe (? s).

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

Ou activez le mode Pattern.DOTALL.

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

2. Exemple RegEx

Exemple d'utilisation de plusieurs lignes de regex correspondant pour obtenir «l'adresse 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;
    }

}

Sortie

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
]