Регулярное выражение соответствует многострочному примеру - 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(); 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; } }
Выход
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 ]