import java.io.BufferedReader;
public class RegexpTest2 {
/**
* @param args
* 入力の終わりに達したら次の入力をStringBufferに入れて、
前の行の残りとマージした状態でmatchを試みる。
=: 行末を区切り文字としない。
lines[1] の行末 E と lines[2] の先頭f で Ef がマッチしている。
行末を区切り文字として、次の行とは継続させないなら
StringBufferを使わずに行単位に処理すればよい。
*/
public static void main(String[] args) {
String[] lines = new String[3];
lines[0] = "abc3fe286xy96zzz2467";
lines[1] = "Zax3489Er3suE";
lines[2] = "fe286The24YZ";
int n = 0;
Pattern pattern = Pattern.compile("([a-zA-Z][a-zA-Z])");
StringBuffer sb = new StringBuffer();
Matcher m = pattern.matcher(sb);
int i = 0; int next_start = 0;
while (n < lines.length) { //
入力がある限り
sb.append(lines[n]); n++; //
入力をStringBufferに追加
// 入力シーケンスが伸びたので、regionの終わりを伸ばす
m.region(next_start, sb.length());
while(m.find()) {
i++; // マッチ回数カウンタ
System.out.println("match["+i+"]:"+m.group()+":("+m.start()+","+m.end()+")");
/* ループでm.find() が失敗すると、region は初期化されて
しまうので、次の入力を追加の際の開始位置をマッチの
次の開始位置としてm.end() を記憶しておく */
next_start = m.end();
}
}
if ( i == 0 ) { System.out.println("Not Matched"); }
}
}