package junkutil.text;

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

/**
 * 正規表現を扱うクラス
 * @author Hiroyuki Shiota
 */
public class RegExpUtil {
	/**
	 * オプション。
	 */
	private int option = 0;
	
	/**
	 * オプションを取得する。
	 * @return
	 */
	public int getOption() {
		return option;
	}

	/**
	 * オプションを設定する。
	 * {@link Pattern}
	 * @param option
	 */
	public void setOption(int option) {
		this.option = option;
	}

	/**
	 * マッチするたびにコールバックする。
	 * @param str
	 * @param re
	 * @param callback
	 * @return
	 */
	public String replace(String str, String re, RegExpCallback callback) {
		StringBuffer result = new StringBuffer();
		Matcher m = Pattern.compile(re, option).matcher(str);
		int end = 0;
		while (m.find()) {
			String plainStr = str.substring(end, m.start());
			//String matchStr = str.substring(m.start(), m.end());
			end = m.end();
			String replaced = callback.getReplaced(result, m);
			if (replaced != null) {
				result.append(plainStr);
				result.append(replaced);
			} else {
				result.append(plainStr);
			}
		}
		result.append(str.substring(end, str.length()));
		return new String(result);
	}
}
