and or join

来源:互联网 发布:网络借贷需要什么条件 编辑:程序博客网 时间:2024/05/20 17:17

public String getValueByExpress(List<RegularExpress> express, String content) {
  String value = "";
  if (express.size() == 0 || null == express || content == null
    || "".equals(content)) {

  }// 当执行的正则表达式只有一条语句时根据正则得到匹配的结果
  else if (express.size() == 1) {
   RegularExpress re = express.get(0);// 得到该节点的信息
   String regex = re.getRegex();// 得到正则表达式
   int groupNo = re.getGroupNo();// 得到regex用到的组号
   Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);// 将给定的正则表达式编译到模式中
   Matcher m = p.matcher(content);// 创建匹配给定输入与此模式的匹配器
   if (m.find()) {
    // 如果找到了符合条件的内容,返回匹配的内容
    value = m.group(groupNo);
   }
  } else {// 当执行的正则表达式有多条的时候根据每条正则表达式得到匹配的结果
   RegularExpress re = express.get(0);
   String run = re.getRun();// 取得该regex的运行方式
   // 如果运行方式是join,调用join方式的逻辑
   if ("join".equalsIgnoreCase(run)) {
    value = getJoinValue(express, content);
   }// 如果运行方式为and,调用and方式的逻辑
   else if ("and".equalsIgnoreCase(run)) {
    value = getAndValue(express, content);
   }// 如果运行方式为or,调用or方式的逻辑
   else if ("or".equalsIgnoreCase(run)) {
    value = getOrValue(express, content);
   }
  }
  return value;
 }

 // 使用join方式时根据正则得到匹配的结果
 public String getJoinValue(List<RegularExpress> express, String content) {
  String result = "";
  for (RegularExpress re : express) {
   String regex = re.getRegex();
   int groupNo = re.getGroupNo();
   Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
   Matcher m = p.matcher(content);
   if (m.find()) {
    result += m.group(groupNo);
   }
  }
  return result;
 }

 // 使用or方式时根据正则得到匹配的结果
 public String getOrValue(List<RegularExpress> express, String content) {
  String result = "";
  for (RegularExpress re : express) {
   String regex = re.getRegex();
   int groupNo = re.getGroupNo();
   Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
   Matcher m = p.matcher(content);
   if (m.find()) {
    result = m.group(groupNo);
    break;
   }
  }
  return result;
 }

 // 使用and方式时根据正则得到匹配的结果
 public String getAndValue(List<RegularExpress> express, String content) {
  String result = "";
  RegularExpress re = express.get(0);
  String regex = re.getRegex();
  int groupNo = re.getGroupNo();
  Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(content);
  String subContent = "";
  if (m.find()) {
   subContent = m.group(groupNo);
   re = express.get(1);
   regex = re.getRegex();
   groupNo = re.getGroupNo();
   String run = re.getRun();
   // 又遇到and匹配方式的语句根据正则匹配结果
   if ("and".equalsIgnoreCase(run)) {
    for (int i = 1; i < express.size(); i++) {
     re = express.get(i);
     regex = re.getRegex();
     groupNo = re.getGroupNo();
     p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
     m = p.matcher(subContent);
     if (m.find()) {
      subContent = m.group(groupNo);
     } else {
      return "";
     }
    }

    result = subContent;
   }// 遇到or匹配方式的语句根据正则匹配结果
   else if ("or".equalsIgnoreCase(run)) {
    for (int i = 1; i < express.size(); i++) {
     re = express.get(i);
     regex = re.getRegex();
     groupNo = re.getGroupNo();
     p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
     m = p.matcher(subContent);
     if (m.find()) {
      result = m.group(groupNo);
      break;
     }
    }
   }
  } else {
   result = subContent;
  }

  return result;
 }