RegExpTools.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package com.jsh.erp.utils;
  2. import org.springframework.util.Assert;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. /**
  6. * Created by Adm on 2015/12/14.
  7. *
  8. * @author yubiao
  9. * <p/>
  10. * mysql匹配正则表达式
  11. */
  12. public class RegExpTools {
  13. /**
  14. * @param search 模糊匹配字符串数组
  15. */
  16. public static String regexp(List<String> search) {
  17. if (search == null || search.isEmpty())
  18. return null;
  19. String regexp = "";
  20. for (String s : search) {
  21. if (!regexp.isEmpty()) {
  22. regexp = regexp + "|";
  23. }
  24. regexp = regexp + ".*";
  25. regexp = regexp + s.replaceAll("\\.", "\\\\.");
  26. regexp = regexp + ".*";
  27. }
  28. return regexp;
  29. }
  30. /**
  31. * @param key json字段key
  32. * @param search 模糊匹配字符串数组
  33. * json的mysql匹配正则表达式
  34. */
  35. public static String regexp(String key, List<String> search) {
  36. if (search == null || search.isEmpty())
  37. return null;
  38. StringBuilder sb = new StringBuilder();
  39. for (String s : search) {
  40. if (sb.length() == 0) {
  41. sb.append(".*\\\"").append(key).append("\\\":\\\"[a-zA-Z0-9]*(");
  42. } else {
  43. sb.append("|");
  44. }
  45. sb.append(s);
  46. }
  47. sb.append(")[a-zA-Z0-9]*\\\".*");
  48. return sb.toString();
  49. }
  50. public static class RegExp {
  51. public static final String ANY = ".*";
  52. public static final String QUOTE = "\\\"";
  53. public static final String LFT_PAREN = "(";
  54. public static final String RHT_PAREN = ")";
  55. public static final String COLON = ":";
  56. public static final String OR = "|";
  57. private final StringBuilder builder = new StringBuilder();
  58. public RegExp any() {
  59. builder.append(ANY);
  60. return this;
  61. }
  62. public RegExp lftParen() {
  63. builder.append(LFT_PAREN);
  64. return this;
  65. }
  66. public RegExp rhtParen() {
  67. builder.append(RHT_PAREN);
  68. return this;
  69. }
  70. public RegExp colon() {
  71. builder.append(COLON);
  72. return this;
  73. }
  74. public RegExp quote() {
  75. builder.append(QUOTE);
  76. return this;
  77. }
  78. public RegExp quote(String str) {
  79. Assert.notNull(str, "str为空");
  80. builder.append(QUOTE).append(str).append(QUOTE);
  81. return this;
  82. }
  83. public RegExp value(String str) {
  84. Assert.notNull(str, "str为空");
  85. builder.append(str);
  86. return this;
  87. }
  88. public RegExp or() {
  89. builder.append(OR);
  90. return this;
  91. }
  92. public RegExp or(List<String> values) {
  93. Assert.notEmpty(values, "values必须非空");
  94. lftParen();
  95. boolean first = true;
  96. for (String value : values) {
  97. if (first) {
  98. builder.append(value);
  99. first = false;
  100. } else {
  101. builder.append(OR).append(value);
  102. }
  103. }
  104. rhtParen();
  105. return this;
  106. }
  107. @Override
  108. public String toString() {
  109. return builder.toString();
  110. }
  111. public static void main(String[] args) {
  112. List<String> values = new ArrayList<String>();
  113. values.add("310");
  114. values.add(String.valueOf(2));
  115. values.add(String.valueOf(3));
  116. RegExp exp = new RegExp();
  117. exp.any();
  118. exp.quote("fullKbNum").colon()
  119. .quote()
  120. .value("[a-zA-Z0-9]*").or(values).value("[a-zA-Z0-9]*")
  121. .quote();
  122. exp.or();
  123. exp.quote("gbId[a-f0-9-]{36}").colon()
  124. .quote()
  125. .value("[0-9]*").or(values).value("[0-9]*")
  126. .quote();
  127. exp.any();
  128. System.out.println(exp);
  129. }
  130. }
  131. }