package com.github.xjtushilei.model; import java.util.ArrayList; import java.util.regex.Pattern; /** * Created by shilei on 2017/4/11. */ public class RegexRule { public RegexRule() { } private ArrayList<String> positiveRule = new ArrayList<String>(); private ArrayList<String> negativerule = new ArrayList<String>(); /** * 添加一个正则规则 正则规则有两种,正正则和反正则 * URL符合正则规则需要满足下面条件: 1.至少能匹配一条正正则 2.不能和任何反正则匹配 * 正正则示例:+a.*c是一条正正则,正则的内容为a.*c,起始加号表示正正则 * 反正则示例:-a.*c时一条反正则,正则的内容为a.*c,起始减号表示反正则 * 如果一个规则的起始字符不为加号且不为减号,则该正则为正正则,正则的内容为自身 * 例如a.*c是一条正正则,正则的内容为a.*c * * @param rule 正则规则 * @return 自己 */ public RegexRule addRule(String rule) { if (rule.length() == 0) { return this; } char pn = rule.charAt(0); String realrule = rule.substring(1); if (pn == '+') { addPositive(realrule); } else if (pn == '-') { addNegative(realrule); } else { addPositive(rule); } return this; } /** * 添加一个正正则规则 * * @param positiveregex * @return 自己 */ public RegexRule addPositive(String positiveregex) { positiveRule.add(positiveregex); return this; } /** * 添加一个反正则规则 * * @param negativeregex * @return 自己 */ public RegexRule addNegative(String negativeregex) { negativerule.add(negativeregex); return this; } /** * 判断输入字符串是否符合正则规则 * * @param str 输入的字符串 * @return 输入字符串是否符合正则规则 */ public boolean regex(String str) { if (positiveRule.size() == 0) { return true; } int state = 0; for (String nregex : negativerule) { if (Pattern.matches(nregex, str)) { return false; } } int count = 0; for (String pregex : positiveRule) { if (Pattern.matches(pregex, str)) { count++; } } if (count == 0) { return false; } else { return true; } } }