| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- 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
- * <p/>
- * mysql匹配正则表达式
- */
- public class RegExpTools {
- /**
- * @param search 模糊匹配字符串数组
- */
- public static String regexp(List<String> 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<String> 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<String> 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<String> values = new ArrayList<String>();
- 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);
- }
- }
- }
|