- public class RegexPattern {
- static private String dLessthanAndEqual2(String value)
- {
- int len = value.length();
- if (len > 1) {
- int i = Integer.parseInt(value.substring(0, 1));
- if (i == 0) {
- value = value.substring(1);
- if (!value.replaceAll("0*", "").equals("")) {
- value = i + dLessthanAndEqual2(value);
- }
- else {
- value = null;
- }
- }
- else {
- i -= 1;
- value = "[0-" + i + "]\\d{" + (len - 1) + '}';
- }
- }
- else {
- value = "[0-" + value + ']';
- }
- return value;
- }
- /**
- *
- * 返回小于等于某个正整数的正则表达式
- * @param value
- * @return
- *
- */
- static public String dLessthanAndEqual(int value)
- {
- String s = String.valueOf(Math.abs(value));
- int len = s.length();
- String p = "\\-";
- p += value < 0 ? '+' : '*';
- p += '(';
- if (len > 1) {
- p += "\\d{1," + (len - 1) + '}';
- }
- String p2;
- for (int i = 0; i < len; i++) {
- p2 = dLessthanAndEqual2(s.substring(i));
- if (null != p2) {
- p += '|' + s.substring(0, i) + p2;
- }
- }
- p += ')';
- return p;
- }
- /**
- *
- * 返回两个正整数之间范围的正则表达式
- * @param sa
- * @param sb
- * @return
- *
- */
- static public String dRange(String sa, String sb)
- {
- if (sa == sb) return sa;
- int a = Math.min(Math.abs(Integer.parseInt(sa)), Math.abs(Integer.parseInt(sb)));
- int b = Math.max(Math.abs(Integer.parseInt(sa)), Math.abs(Integer.parseInt(sb)));
- if (b <= 9) return '[' + String.valueOf(a) + '-' + String.valueOf(b) + ']';
- int c = b - a;
- sa = String.valueOf(a);
- sb = String.valueOf(b);
- String sc = String.valueOf(c);
- int la = sa.length();
- int lb = sb.length();
- int lc = sc.length();
- String pa = "";
- String pb = "";
- String p = "";
- String tp = "";
- String ti;
- String ts;
- int tl;
- int _d1;
- int _d2;
- int i;
- ts = String.valueOf(Integer.parseInt(sa.substring(0, 1)) + (la > 1 ? 1 : 0));
- tl = ts.length();
- if (la < lb) {
- if (tl == 1) {
- tp += '[' + ts + "-9]\\d{" + (la - 1) + "}|";
- }
- i = la + 1;
- if (i < lb) {
- while (i < lb) {
- tp += "\\d{" + i + "}|";
- i++;
- }
- }
- pa += tp;
- }
- else if (tl == 1) {
- _d1 = Integer.parseInt(sa.substring(0, 1));
- _d2 = Integer.parseInt(sb.substring(0, 1)) - 1;
- if (_d1 < _d2) {
- tp = '[' + ts + '-' + _d2 + "]\\d{" + (la - 1) + "}|";
- pa += tp;
- }
- }
- for (i = 1; i < la; i++) {
- ti = sa.substring(0, i);
- tp = ti;
- ts = sa.substring(i);
- tl = ts.length();
- if (tl != 1) {
- if (lc < la) {
- continue;
- }
- _d1 = Integer.parseInt(ts.substring(0, 1)) + 1;
- _d1 = _d1 > 9 ? 9 : _d1;
- _d2 = 9;
- if (lc == tl) {
- _d2 = Integer.parseInt(sc.substring(0, 1));
- _d2 = _d2 == 9 ? 8 : _d2;
- }
- tp += '[' + _d1 + '-' + _d2 + ']';
- if (Integer.parseInt(ti + _d1 + ts.substring(1).replaceAll("\\d", "0")) < a) {
- tp += "\\d{" + (la - i - 2) + "}[" + sa.charAt(la - 1) + "-9]|";
- }
- else {
- tp += "\\d{" + (la - i - 1) + "}|";
- }
- }
- else {
- if (Integer.parseInt(ti + '9') > b) {
- tp += '[' + ts + '-' + sb.charAt(lb - 1) + ']';
- }
- else {
- tp += '[' + ts + "-9]|";
- }
- }
- pa += tp;
- }
- if (lb > la) {
- tp = "[0-" + (Integer.parseInt(sb.substring(0, 1)) - 1) + "]\\d{" + (lb - 1) + "}|";
- pa += tp;
- }
- for (i = 1; i < lb; i++) {
- ti = sb.substring(0, i);
- tp = ti;
- ts = sb.substring(i);
- tl = ts.length();
- if (tl != 1) {
- if (lc < la) {
- continue;
- }
- _d1 = 0;
- _d2 = Integer.parseInt(ts.substring(0, 1)) - 1;
- if (lc == tl) {
- _d1 = Integer.parseInt(sa.substring(la - lc, la - lc + 1)) + 1;
- }
- if (_d1 == Integer.parseInt(sb.substring(lb - lc, lb - lc + 1))) {
- _d1 = 0;
- }
- if (_d2 < 0) {
- continue;
- }
- _d1 = _d1 > 9 ? 9 : _d1;
- tp += '[' + _d1 + '-' + _d2 + ']';
- if (Integer.parseInt(ti + _d2 + ts.substring(1).replaceAll("\\d", "9")) > b) {
- tp += "\\d{" + (lb - i - 2) + "}[0-" + sb.charAt(lb - 1) + "]|";
- }
- else {
- tp += "\\d{" + (lb - i - 1) + "}|";
- }
- }
- else {
- if (Integer.parseInt(ti + '0') < a) {
- tp += '[' + sa.charAt(la - 1) + '-' + ts + ']';
- }
- else {
- tp += "[0-" + ts + ']';
- }
- }
- pb += tp;
- }
- p = pa + '|' + pb;
- p = p.replaceAll("^\\|*|\\|*$", "");
- p = p.replaceAll("\\|+", "|");
- return p;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/190620149802.html
来源: http://www.codesnippet.cn/detail/190620149802.html