正規表現は複数行の例にマッチします – Java
デフォルトでは、 “。”は改行に一致しません。複数の行を照合するには、接頭辞(?s)を追加するか、Pattern.DOTALLフラグを有効にします。
1.例
アドレスサンプルは、「アドレス1」のみを抽出する必要があります。
Starting...
Address 1: 88 app 2/8
superman taman, puchong
36100, Malaysia
Address 2: abc
End
Address 1:\\s(.** )Address 2:
-
正しい:** “アドレス1″を抽出するには、接頭辞(?s)を追加します。
(?s)Address 1:\\s(.** )Address 2:
または、Pattern.DOTALLモードを有効にします。
Pattern.compile(Address 1:\\s(.** )Address 2:, Pattern.DOTALL);
2.正規表現の例
例は、 “アドレス1″を取得するために一致する正規表現の複数の行を使用する。
package com.mkyong.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<String> list = obj.getAddress(data);
System.out.println("Test Data : ");
System.out.println(data + "\n");
System.out.println("Address Resut : " + list);
}
private List<String> getAddress(String data){
List<String> result = new ArrayList<String>();
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].... === 参考文献 . http://www.emacswiki.org/emacs/MultilineRegexp[Emacs Multiline Regexp 例]。 http://en.wikipedia.org/wiki/Regular__expression[Wikipedia:Regular 式/] link://tag/regex/[正規表現]