Java 正则表达式的用法与实例
生活随笔
收集整理的這篇文章主要介紹了
Java 正则表达式的用法与实例
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄結(jié)構(gòu)
- 一、簡(jiǎn)介
- 二、相關(guān)符號(hào)
- 1)單個(gè)符號(hào)
- 2)次數(shù)符號(hào)
- 3)快捷字符
- 三、常用的正則表達(dá)式
- 四、正則表達(dá)式的常見(jiàn)操作
- 1)匹配
- 2)切割
- 3)替換
- 4)獲取
- 五、郵箱格式驗(yàn)證實(shí)例
- 六、正則表達(dá)式在線生成代碼工具
一、簡(jiǎn)介
正則表達(dá)式,又稱規(guī)則表達(dá)式(Regular Expression,在代碼中常簡(jiǎn)寫(xiě)為regex、regexp或RE)。描述了一種字符串匹配的模式(pattern),可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。
二、相關(guān)符號(hào)
1)單個(gè)符號(hào)
| ^ | 匹配輸入字符串開(kāi)始的位置 |
| $ | 匹配輸入字符串結(jié)尾的位置 |
| . | 匹配單個(gè)任意字符,如Ja.a,可以匹配Java但不能匹配Javva |
| 中括號(hào)[] | 匹配單個(gè)字符,但只能匹配括號(hào)中指定的字符,如ja[vr]a,jara合法 |
| | 符號(hào) | 或,和中括號(hào)[]類似,匹配指定的字符,但可以不是單個(gè),如r(a|b|c|dd)n |
| ^符號(hào) | 表示否,如[^0—9]即不匹配數(shù)字 |
2)次數(shù)符號(hào)
以下符號(hào)是匹配其前面的子表達(dá)式出現(xiàn)的次數(shù):
| * | 0次或者多次 |
| + | 1次或者多次 |
| ? | 0次或者1次 |
| {n} | 剛好n次 |
| {n,} | 至少匹配n次 |
| {n,m} | n次到m次 |
舉個(gè)栗子:
o{2}與"Bob"中的"o"不匹配,但與"food"中的兩個(gè)"o"匹配。 o{1,}等效于o+ o{0,}等效于o* o{0,1}'等效于 o?3)快捷字符
| \d | 匹配一個(gè)數(shù)字字符,等價(jià)于 [0-9] |
| \D | 匹配一個(gè)非數(shù)字字符,等價(jià)于 [^0-9] |
| \w | 匹配字母、數(shù)字、下劃線,等價(jià)于[A-Za-z0-9_] |
| \W | 等價(jià)于[^A-Za-z0-9_] |
| \s | 空字符,只可以匹配一個(gè)空格、制表符、回車符、換頁(yè)符,不可以匹配自己輸入的多個(gè)空格 |
| \S | 匹配任何非空白字符 |
更多字符可以參考菜鳥(niǎo)教程
三、常用的正則表達(dá)式
整理一些常見(jiàn)的正則表達(dá)式如下:
- 漢字:^[\u4e00-\u9fa5]{0,}$
- 長(zhǎng)度為3-20的所有字符:^.{3,20}$
- Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
- 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
- InternetURL:[a-zA-z]+://[^\s]* 或 ^https://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
- 手機(jī)號(hào)碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
- IP地址:\d+.\d+.\d+.\d+
- 中國(guó)郵政編碼:[1-9]\d{5}(?!\d)
- 騰訊QQ號(hào):[1-9][0-9]{4,}
其余的表達(dá)式可以參考這里
四、正則表達(dá)式的常見(jiàn)操作
java中的正則表達(dá)式,建議多研究pattern類 和 matcher類
import java.util.regex.Matcher; import java.util.regex.Pattern;1)匹配
方法:
- public boolean matches(String regex)
舉例:
public static void checkQQ(){String qq = "123456789abc";String regex = "[1-9]\\d{4,14}";boolean flag = qq.matches(regex);if(flag)System.out.println(qq+"合規(guī)");elseSystem.out.println(qq+"不合規(guī)");} //不合規(guī)2)切割
方法:
- public String[] split(String regex)
舉例:
public static void splitTest(){String str = "摸 魚(yú) 寫(xiě) 博 客";//按照多個(gè)空格來(lái)進(jìn)行切割String reg = " +";String[] arr = str.split(reg); System.out.println(arr.length);//用加強(qiáng)for循環(huán)遍歷for(String s : arr){System.out.println(s);}}3)替換
方法:
- public String replaceAll(String regex,String replacement)
- replaceFirst 替換首次匹配,replaceAll 替換所有匹配
舉例:
public static void replaceAllTest(){String str = "java123456Regular6543210Expression";//注意String regex = "\\d";和\\d{5,}的區(qū)別String regex = "\\d{5,}";str = str.replaceAll(regex,"#");System.out.println(str);} // java#Regular#Expression4)獲取
方法:
- 將正則表達(dá)式封裝成對(duì)象。
- 讓正則對(duì)象和要操作的字符串相關(guān)聯(lián)。
- 關(guān)聯(lián)后,獲取正則匹配引擎。
- 通過(guò)引擎對(duì)符合規(guī)則的子串進(jìn)行操作,比如取出。
舉例:
public static void getTest(){String str = "mo yu xie bo ker";String regex = "\\b[a-z]{3}\\b";//匹配只有三個(gè)字母的單詞//將規(guī)則封裝成對(duì)象。Pattern p = Pattern.compile(regex);//讓正則對(duì)象和要作用的字符串相關(guān)聯(lián)。獲取匹配器對(duì)象。Matcher m = p.matcher(str);//將規(guī)則作用到字符串上,并進(jìn)行符合規(guī)則的子串查找。boolean b = m.find();while(b){//獲取匹配后結(jié)果。System.out.println(m.group());// start() 字符的開(kāi)始下標(biāo)(包含)//end() 字符的結(jié)束下標(biāo)(不包含)System.out.println(m.start()+"...."+m.end()); }}五、郵箱格式驗(yàn)證實(shí)例
以常見(jiàn)的郵箱格式為例:
- 由a~z的英文字母(不區(qū)分大小寫(xiě))開(kāi)頭
- 可由英文字母、0~9的數(shù)字、點(diǎn)、減號(hào)或下劃線組成
- @左側(cè)長(zhǎng)度為1~20個(gè)字符
- 不能以點(diǎn)、減號(hào)結(jié)尾
代碼實(shí)現(xiàn):
public static boolean isValidEmail(String email) {if ((email != null) && (!email.isEmpty())) {//定義郵箱格式的正則表達(dá)式String regex = "^(\w+([-.][A-Za-z0-9]+)*){1,20}@\w+([-.][A-Za-z0-9]+)*\.\w+([-.][A-Za-z0-9]+)*$";//返回格式驗(yàn)證結(jié)果return Pattern.matches(regex, email);}return false;}六、正則表達(dá)式在線生成代碼工具
懶人直接走這兒:正則表達(dá)式在線生成代碼工具
寫(xiě)完剛好五點(diǎn)半,下班了伙計(jì)們!
總結(jié)
以上是生活随笔為你收集整理的Java 正则表达式的用法与实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么用spss做冗余分析_【攻略】手把手
- 下一篇: Java移位加密