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(); Listlist = 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 ]