java正則小理解

2021-08-10 10:59:10 字數 1445 閱讀 6105

之前一直是以為正則沒什麼用處,就是個校驗前台表單提交的時候,郵箱格式是否正確啊,手機號碼是否合法啊(實際上很多現成的校驗我覺得並不能說明合法),而目前很多的前端框架也是提供這種校驗的,甚至只需要配置乙個email就可以表明這個input是要輸入郵箱的,校驗郵箱格式,完全不需要自己寫js來判斷,直到最近,工作中出現乙個需要把字串中的美元轉換**民幣的需求,才發現正則是這麼神奇好用有趣的東西。

先說pattern吧,pattern是個沒有辦法 new pattern()出來的工具,所以使用pattern的時候,要構造規則,用到的是pattern的乙個自己的方法,叫compile。比如:

pattern p = pattern.compile("\\d+");
就構造出了乙個數字校驗的規則,\d是數字校驗,+代表至少有乙個。

然後使用matcher進行匹配,matcher的眾多方法中,個人覺得常用的有:

matcher.matches()

這個方法字面意思來看,就是匹配,即字串完全符合規則要求,比如說需要做字串處理,進行型別轉換,但是直接進行integer.parseint(str)會存在萬一字串並不是純數字,這個轉換就會失敗,就可以使用如下的正則先進行一步判斷,能否轉換

//算上符號及小數點

pattern p = pattern.compile("^(\\d|-)\\d*\\.\\d*$");

string str = "123456";

matcher m = m.matches(str);

if(m.matches())

else

matcher.find();

字面意思是查詢,即字串包含規則,就認為是符合的,比如我之前工作要求,需要把字串中的數字提取出來做個匯率轉換,用這個方法就比較合適。

pattern p = pattern.compile("\\d+");

string str = "123456"

; matcher m = m.matches(str);

if(m.find())

else

很多網上的現成的正則校驗有很多,但是我覺得要真正符合工作需求,還是自己會寫正則比較重要。

附上手機號校驗(大陸,電信聯通移動分開),手機號開頭我是去官網查的前三位都有什麼,手機號規則是開頭3位表示運營商,中間四位是區號,但是沒有發現相關文件來說明這四位數是什麼樣的,所以我只能校驗是數字,最後四位是客戶編碼,同樣是數字校驗即可。

移動:^(13[4-9]|147|15[0-2]|15[7-9]|178|18[2-4]|187|188)\d

聯通:^(13[0-2]|155|156|185|186|176)\d

電信:^(133|153|180|181|189|173|177)\d

JAVA正規表示式小總結

最近專案中正在做後台校驗,而後台校驗也基本都是使用正規表示式校驗,本文做一些粗略的總結。1 字串長度 注意有乙個點在 前,表示匹配所有。之前一定是乙個捕獲組,因此如果有其他篩選要求並且限制長度則為在總捕獲組的最後加上 來限制長度。2 如何表示不為abcd的任意乙個字元 abcd 使用 表示在不為內的...

Java正規表示式小測試

public class regulartest system.out.println 獲取某一段匹配資料 string datestr feifei 2013 02 14 is a dog pattern p1 pattern.compile d d d matcher m1 p1.matcher...

正則小技巧

前兩天在csdn看到這樣乙個問題 給定一段文字的編碼序列,如604f20007d59 你 好 如何得到其對應的文字 有人給出了如下正則解決方案 string input 4f600020597d string patern string output regex.unescape regex.rep...