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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

  • 開源應(yīng)用
正則表達(dá)式ApacheQQJDK?

一般公司在開發(fā)一類對(duì)的號(hào)碼時(shí),會(huì)預(yù)留一些號(hào)碼給以后升級(jí)的會(huì)員使用,比如旺旺靚號(hào),QQ號(hào)等,采用正則表達(dá)式實(shí)現(xiàn)較好,通過(guò)規(guī)則引擎的后臺(tái)頁(yè)面做成實(shí)時(shí)可配置的也是不錯(cuò)的選擇。

一. 一般會(huì)有如下的正則需求

??? 代碼中每行都標(biāo)有注釋,這個(gè)就是需求,為設(shè)置靚號(hào)應(yīng)該考慮的方面,這里特別提示下,不能忘記跟公司相關(guān)的業(yè)務(wù),股票代碼等檢查。

?

?

代碼如下:

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;??
  • ????????}??
  • ????????//?手機(jī)號(hào)、生日號(hào)、跟公司業(yè)務(wù)相關(guān)的號(hào)碼??
  • ?????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*$");??
  • ????????//?重復(fù)號(hào)碼,鏡子號(hào)碼??
  • ?????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?位置重復(fù)??
  • ????????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?結(jié)尾??
  • ????????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;}// 手機(jī)號(hào)、生日號(hào)、跟公司業(yè)務(wù)相關(guān)的號(hào)碼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*$");// 重復(fù)號(hào)碼,鏡子號(hào)碼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 位置重復(fù)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 結(jié)尾levitPatterns.add("^[0-9]*(518|918)$");}@Overridepublic boolean isAllow(String input) {Assert.notNull(input);return !RegexUtil.contains(input, levitPatterns);}static {init();}

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

    ??

    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 這部分代表的 第一個(gè)A 位置是1 第二個(gè)B位置是2,重復(fù)B則用\\2標(biāo)識(shí)

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

    ?

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

    為什么拋棄java現(xiàn)有的API不用,而使用perl5規(guī)范的正則庫(kù)呢?他是最全面的正則表達(dá)式API,全面兼容perl5,同時(shí)也是優(yōu)化的最好的API之一,在未來(lái)的JDK版本中可能會(huì)看到的。

    ?

    ?

    上面程序調(diào)用的正則代碼如下:

    Java代碼 ?
  • public?class?RegexUtil?{??
  • ??
  • ????private?static?PatternCompiler?compiler?=?new?Perl5Compiler();??
  • ??
  • ????private?static?PatternMatcher??matcher??=?new?Perl5Matcher();??
  • ??
  • ????private?static?Pattern?????????pattern??=?null;??
  • ??
  • ????/**?
  • ?????*?根據(jù)正則過(guò)濾條件過(guò)濾?
  • ?????*??
  • ?????*?@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;??
  • ????}??
  • ??
  • ????/**?
  • ?????*?根據(jù)批量正則過(guò)濾條件過(guò)濾?
  • ?????*??
  • ?????*?@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;??
  • ????}??
  • }??
  • 總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。