package cn.newgxu.bbs.common.filter; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ public class TagConvertFilter { private static final String TAG_PATTERN_STRING = "(\\$)|(\\{)|(\\})"; private static final String RE_TAG_PATTERN_STRING = "(####36####)|(####123####)|(####125####)"; private static final String REGULAR_STOP_1 = "\\$"; private static final String REGULAR_STOP_2 = "\\{"; private static final String REGULAR_STOP_3 = "\\}"; private static final String RE_REGULAR_STOP_1 = "####36####"; private static final String RE_REGULAR_STOP_2 = "####123####"; private static final String RE_REGULAR_STOP_3 = "####125####"; public static String before(String input) { // log.debug("before..."); try { return tagConverter(input); } catch (Exception e) { return input; } } public static String after(String input) { // log.debug("after..."); try { return ReTagConverter(input); } catch (Exception e) { return input; } } private static String tagConverter(String input) throws Exception { Pattern pattern = Pattern.compile(TAG_PATTERN_STRING, 2); Matcher matcher = pattern.matcher(input); StringBuffer stringbuffer = new StringBuffer(); for (boolean flag = matcher.find(); flag; flag = matcher.find()) { if (matcher.group(1) != null) { matcher.appendReplacement(stringbuffer, RE_REGULAR_STOP_1); } else if (matcher.group(2) != null) { matcher.appendReplacement(stringbuffer, RE_REGULAR_STOP_2); } else if (matcher.group(3) != null) { matcher.appendReplacement(stringbuffer, RE_REGULAR_STOP_3); } } matcher.appendTail(stringbuffer); return stringbuffer.toString(); } private static String ReTagConverter(String input) throws Exception { Pattern pattern = Pattern.compile(RE_TAG_PATTERN_STRING, 2); Matcher matcher = pattern.matcher(input); StringBuffer stringbuffer = new StringBuffer(); for (boolean flag = matcher.find(); flag; flag = matcher.find()) { if (matcher.group(1) != null) { matcher.appendReplacement(stringbuffer, REGULAR_STOP_1); } else if (matcher.group(2) != null) { matcher.appendReplacement(stringbuffer, REGULAR_STOP_2); } else if (matcher.group(3) != null) { matcher.appendReplacement(stringbuffer, REGULAR_STOP_3); } } matcher.appendTail(stringbuffer); return stringbuffer.toString(); } }