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