正規表現は複数行の例に一致します– 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();
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;
}
}
出力
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 ]