正規表現で文字列を抜き出す

Javaで正規表現を使って文字列を抜き出すには、次のようなプログラムを用意すればいい。正規表現についての詳しい説明は省略。便利と言えば便利。ただ、ネストした構造とか場合分けが多い構造の文章に対して適用するのは結構大変ので、そういった場合は独自にParserを実装した方がいい。Interpreterパターンとか使えばバグも少なく実装できるはず。ただ、言語定義ができない人には難しいので、コンパイラ技術とか勉強することになるはず。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class App {
  private String regexp1 = "<div class=target>(.*)<div class=target2>(.*)</div></div>";
  private String regexp2 = "href=\"(.+?)\"";
  private String target1 = "<div class=target>abc<div class=target2>def</div></div>";
  private String target2 = "<a href=\"index.html\">トップへ</a><a href=\"index1.html\">トップ1へ</a>";

  public void sample() {
    Pattern pattern = Pattern.compile(regexp1);
    Matcher matcher = pattern.matcher(target1);
    while (matcher.find()) {
      System.out.println("一致: " + matcher.group(2));
    }
    // URL抜き出し
    pattern = Pattern.compile(regexp2);
    matcher = pattern.matcher(target2);
    while (matcher.find()) {
      System.out.println(matcher.group(1));
    }
  }

  public static void main(String[] args) {
    App app = new App();
    app.sample();
  }
}

実行結果は次の通り

一致: def
index.html
index1.html
同じタグの記事: Java
同じカテゴリの記事: Java
関連書籍: Java