package cn.newgxu.bbs.common.filter.ubb; import java.util.regex.Matcher; import java.util.regex.Pattern; import cn.newgxu.bbs.common.filter.AbstractBaseFilter; import cn.newgxu.bbs.common.filter.Filter; /** * * @author 叨叨雨 * @since 4.0.0 * @version $Revision 1.1$ */ public class QuoteReluctantFilter extends AbstractBaseFilter { private static final String QUOTE_PATTERN_STRING_RELUCTANT = "(\\[quote\\])(.*?)(\\[\\/quote\\])"; private static final String QUOTE_APPEND_1 = "<DIV class=\"quote\">"; private static final String QUOTE_APPEND_2 = "</DIV>"; public QuoteReluctantFilter(Filter filter) { super(filter); } private boolean haveQuote(String content) { Matcher matcher = Pattern.compile(QUOTE_PATTERN_STRING_RELUCTANT) .matcher(content); while (matcher.find()) { return true; } return false; } public String convert(String input) { try { return InnerQuoteCoverter(input); } catch (Exception e) { return input; } } private String InnerQuoteCoverter(String input) throws Exception { if (haveQuote(input)) { Pattern pattern = Pattern .compile(QUOTE_PATTERN_STRING_RELUCTANT, 2); Matcher matcher = pattern.matcher(input); StringBuffer stringbuffer = new StringBuffer(); for (boolean flag = matcher.find(); flag; flag = matcher.find()) { matcher .appendReplacement(stringbuffer, QUOTE_APPEND_1 + InnerQuoteCoverter(matcher.group(2)) + QUOTE_APPEND_2); } matcher.appendTail(stringbuffer); return stringbuffer.toString(); } return input; } }