日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

靓号正则表达式(前后向查找等) 和 apache正则包使用

發布時間:2024/1/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 靓号正则表达式(前后向查找等) 和 apache正则包使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 開源應用
正則表達式ApacheQQJDK?

一般公司在開發一類對的號碼時,會預留一些號碼給以后升級的會員使用,比如旺旺靚號,QQ號等,采用正則表達式實現較好,通過規則引擎的后臺頁面做成實時可配置的也是不錯的選擇。

一. 一般會有如下的正則需求

??? 代碼中每行都標有注釋,這個就是需求,為設置靚號應該考慮的方面,這里特別提示下,不能忘記跟公司相關的業務,股票代碼等檢查。

?

?

代碼如下:

Java代碼 ?
  • public?class?CreditCodeRegexValidateStategyServiceImpl?implements?CreditCodeValidateStategyService?{??
  • ??
  • ????private?static?List<String>?levitPatterns;??
  • ??
  • ????static?synchronized?private?void?init()?{??
  • ????????if?(levitPatterns?==?null)?{??
  • ????????????levitPatterns?=?new?ArrayList<String>();??
  • ????????}?else?{??
  • ????????????return;??
  • ????????}??
  • ????????//?手機號、生日號、跟公司業務相關的號碼??
  • ?????levitPatterns.add("^(0|13|15|18|168|400|800)[0-9]*$");??
  • ????????levitPatterns.add("^\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$");??
  • ????????levitPatterns.add("^\\d*(1688|2688|2088|2008|5188|10010|10001|666|888|668|686|688|866|868|886|999)\\d*$");??
  • ????????//?重復號碼,鏡子號碼??
  • ?????levitPatterns.add("^(<a>\\d)(\\d)(\\d)\\1\\2\\3$");??
  • </a>????????levitPatterns.add("^(\\d)(\\d)(\\d)\\3\\2\\1$");??
  • ????????//?AABB??
  • ????????levitPatterns.add("^\\d*(\\d)\\1(\\d)\\2\\d*$");??
  • ????????//?AAABBB??
  • ????????levitPatterns.add("^\\d*(\\d)\\1\\1(\\d)\\2\\2\\d*$");??
  • ????????//?ABABAB??
  • ????????levitPatterns.add("^(\\d)(\\d)\\1\\2\\1\\2\\1\\2$");??
  • ????????//?ABCABC??
  • ????????levitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");??
  • ????????//?ABBABB??
  • ????????levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");??
  • ????????//?AABAAB??
  • ????????levitPatterns.add("^(\\d)\\1(\\d)\\1\\1\\2$");??
  • ??????????
  • ????????//?4-8?位置重復??
  • ????????levitPatterns.add("^\\d*(\\d)\\1{2,}\\d*$");??
  • ????????//?4位以上?位遞增或者遞減(7890也是遞增)??
  • ????????levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");??
  • ??????????
  • ????????//?不能以?518?、918?結尾??
  • ????????levitPatterns.add("^[0-9]*(518|918)$");??
  • ????}??
  • ??
  • ????@Override??
  • ????public?boolean?isAllow(String?input)?{??
  • ????????Assert.notNull(input);??
  • ????????return?!RegexUtil.contains(input,?levitPatterns);??
  • ????}??
  • ??
  • ????static?{??
  • ????????init();??
  • ????}??
  • public class CreditCodeRegexValidateStategyServiceImpl implements CreditCodeValidateStategyService {private static List<String> levitPatterns;static synchronized private void init() {if (levitPatterns == null) {levitPatterns = new ArrayList<String>();} else {return;}// 手機號、生日號、跟公司業務相關的號碼levitPatterns.add("^(0|13|15|18|168|400|800)[0-9]*$");levitPatterns.add("^\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$");levitPatterns.add("^\\d*(1688|2688|2088|2008|5188|10010|10001|666|888|668|686|688|866|868|886|999)\\d*$");// 重復號碼,鏡子號碼levitPatterns.add("^(<a>\\d)(\\d)(\\d)\\1\\2\\3$"); </a> levitPatterns.add("^(\\d)(\\d)(\\d)\\3\\2\\1$");// AABBlevitPatterns.add("^\\d*(\\d)\\1(\\d)\\2\\d*$");// AAABBBlevitPatterns.add("^\\d*(\\d)\\1\\1(\\d)\\2\\2\\d*$");// ABABABlevitPatterns.add("^(\\d)(\\d)\\1\\2\\1\\2\\1\\2$");// ABCABClevitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");// ABBABBlevitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");// AABAABlevitPatterns.add("^(\\d)\\1(\\d)\\1\\1\\2$");// 4-8 位置重復levitPatterns.add("^\\d*(\\d)\\1{2,}\\d*$");// 4位以上 位遞增或者遞減(7890也是遞增)levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");// 不能以 518 、918 結尾levitPatterns.add("^[0-9]*(518|918)$");}@Overridepublic boolean isAllow(String input) {Assert.notNull(input);return !RegexUtil.contains(input, levitPatterns);}static {init();}

    對于以上正則,前面的大多人都很熟悉了,這里主要講位置查找和前后向查找,即如下兩種號碼的判斷

    ??

    Java代碼 ?
  • //?ABBABB??
  • ??????levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");??
  • // ABBABBlevitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$"); Java代碼 ?
  • //?4位以上?位遞增或者遞減(7890也是遞增)??
  • ??????levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");??
  • ????????
  • // 4位以上 位遞增或者遞減(7890也是遞增)levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");

    位置查找:?\\2\\1\\2\\2 這部分代表的 第一個A 位置是1 第二個B位置是2,重復B則用\\2標識

    后向查找?? ("(?:(?:0(?=1)| 對于連續號碼,?=表示往后看,要判斷0后面是1嗎,1后面是2嗎,如此反復可以得到連續號碼

    ?

    二. 使用 org.apache.oro.text.regex.Pattern?? 代替 java自身帶的partern,

    為什么拋棄java現有的API不用,而使用perl5規范的正則庫呢?他是最全面的正則表達式API,全面兼容perl5,同時也是優化的最好的API之一,在未來的JDK版本中可能會看到的。

    ?

    ?

    上面程序調用的正則代碼如下:

    Java代碼 ?
  • public?class?RegexUtil?{??
  • ??
  • ????private?static?PatternCompiler?compiler?=?new?Perl5Compiler();??
  • ??
  • ????private?static?PatternMatcher??matcher??=?new?Perl5Matcher();??
  • ??
  • ????private?static?Pattern?????????pattern??=?null;??
  • ??
  • ????/**?
  • ?????*?根據正則過濾條件過濾?
  • ?????*??
  • ?????*?@param?input?
  • ?????*?@param?levitPatterns?
  • ?????*?@return?
  • ?????*?@throws?MalformedPatternException?
  • ?????*/??
  • ????public?static?boolean?contains(String?input,?String?patternString)?{??
  • ????????try?{??
  • ????????????pattern?=?compiler.compile(patternString);??
  • ????????????if?(matcher.contains(input,?pattern))?{??
  • ????????????????return?true;??
  • ????????????}??
  • ????????}?catch?(MalformedPatternException?e)?{??
  • ????????????return?false;??
  • ????????}??
  • ????????return?false;??
  • ????}??
  • ??
  • ????/**?
  • ?????*?根據批量正則過濾條件過濾?
  • ?????*??
  • ?????*?@param?input?
  • ?????*?@param?patternStrings?
  • ?????*?@return?
  • ?????*?@throws?MalformedPatternException?
  • ?????*/??
  • ????public?static?boolean?contains(String?input,?List<String>?patternStrings)?{??
  • ????????for?(Iterator<String>?lt?=?patternStrings.listIterator();?lt.hasNext();)?{??
  • ????????????if?(contains(input,?(String)?lt.next()))?{??
  • ????????????????return?true;??
  • ????????????}??
  • ????????????continue;??
  • ????????}??
  • ????????return?false;??
  • ????}??
  • }??
  • 總結

    以上是生活随笔為你收集整理的靓号正则表达式(前后向查找等) 和 apache正则包使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。