アットウィキロゴ
ysnote @Wiki
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

ysnote @Wiki

java 正規表現

最終更新:

ysnote

- view
だれでも歓迎! 編集

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"); }
    }

}

最近更新されたスレッド
ウィキ募集バナー