正規表現は複数行の例に一致します– 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. 正規表現の例
「アドレス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 ]