package com.jsh.erp.utils; import org.springframework.util.Assert; import java.util.ArrayList; import java.util.List; /** * Created by Adm on 2015/12/14. * * @author yubiao *

* mysql匹配正则表达式 */ public class RegExpTools { /** * @param search 模糊匹配字符串数组 */ public static String regexp(List search) { if (search == null || search.isEmpty()) return null; String regexp = ""; for (String s : search) { if (!regexp.isEmpty()) { regexp = regexp + "|"; } regexp = regexp + ".*"; regexp = regexp + s.replaceAll("\\.", "\\\\."); regexp = regexp + ".*"; } return regexp; } /** * @param key json字段key * @param search 模糊匹配字符串数组 * json的mysql匹配正则表达式 */ public static String regexp(String key, List search) { if (search == null || search.isEmpty()) return null; StringBuilder sb = new StringBuilder(); for (String s : search) { if (sb.length() == 0) { sb.append(".*\\\"").append(key).append("\\\":\\\"[a-zA-Z0-9]*("); } else { sb.append("|"); } sb.append(s); } sb.append(")[a-zA-Z0-9]*\\\".*"); return sb.toString(); } public static class RegExp { public static final String ANY = ".*"; public static final String QUOTE = "\\\""; public static final String LFT_PAREN = "("; public static final String RHT_PAREN = ")"; public static final String COLON = ":"; public static final String OR = "|"; private final StringBuilder builder = new StringBuilder(); public RegExp any() { builder.append(ANY); return this; } public RegExp lftParen() { builder.append(LFT_PAREN); return this; } public RegExp rhtParen() { builder.append(RHT_PAREN); return this; } public RegExp colon() { builder.append(COLON); return this; } public RegExp quote() { builder.append(QUOTE); return this; } public RegExp quote(String str) { Assert.notNull(str, "str为空"); builder.append(QUOTE).append(str).append(QUOTE); return this; } public RegExp value(String str) { Assert.notNull(str, "str为空"); builder.append(str); return this; } public RegExp or() { builder.append(OR); return this; } public RegExp or(List values) { Assert.notEmpty(values, "values必须非空"); lftParen(); boolean first = true; for (String value : values) { if (first) { builder.append(value); first = false; } else { builder.append(OR).append(value); } } rhtParen(); return this; } @Override public String toString() { return builder.toString(); } public static void main(String[] args) { List values = new ArrayList(); values.add("310"); values.add(String.valueOf(2)); values.add(String.valueOf(3)); RegExp exp = new RegExp(); exp.any(); exp.quote("fullKbNum").colon() .quote() .value("[a-zA-Z0-9]*").or(values).value("[a-zA-Z0-9]*") .quote(); exp.or(); exp.quote("gbId[a-f0-9-]{36}").colon() .quote() .value("[0-9]*").or(values).value("[0-9]*") .quote(); exp.any(); System.out.println(exp); } } }