Regex在Java中使用

來源:互聯網
上載者:User

標籤:

Regex

定義

用一組特殊的字元來描述一組字串的格式
用於驗證字串是否滿足格式
不關心字串的內容是否有效


1. 基本Regex
所謂Regex就是使用一系列預定義的特殊字元來描述一個字串的格式規則,然後使用該格式規則匹配某個字串是否符合格式要求。
 “.”和"\"

"."點兒,在Regex中標是任意一個字元。
"\"在Regex中是轉意字元,當我們需要描述一個已經被Regex使用的特殊字元時,我們就可以通過使用"\"將其轉變為原本的意思。

    \\s 轉譯字元

"\"在Regex中也有一些預定義的特殊內容:
    \d:表示任意一個數字
    \w:表示任意一個單詞字元(只能是 數字,字母,底線)
    \s:表示任意一個空白字元(\t \r \n \f \x0B)
    \D:表示任意一個非數字字元
    \W:表示任意一個非單詞字元
    \S:表示任意一個非空白字元

 

^"和"$"

通過在Regex的開始添加"^"以及末尾添加"$"來表示一個整體。若不使用它們,那麼Regex只匹配某個字串的部分內容是否符合格式規則,但使用它們,則要求字串必須從頭到尾都滿足該格式規則。
例如:
^\w{ 8,10 }$ 表示整體字串只能出現單詞字元8-10個
"字元集合 []"

"[]"用來描述單一字元,方括弧內部可以定義這個字元的內容,也可以描述一個範圍。
例如:
[abc]:表示該字元只能是a或者b或者c
[123]:表示該字元只能是1或者2或者3
當我們需要描述所有小寫字母是,我們可以使用範圍
[a-z]:表示該字元可以是任意一個小寫字母
同樣還可以:
[0-9]:表示該字元可以是任意一個數字
也可以在多個範圍內選擇:
[a-zA-Z0-9_]:表示該字元可以是任意字母,數字以及"底線"

 "*"、"+"、"?"

通常我們需要描述的字串會有很多重複出現的元素,但又不需要嚴格限制出現的次數時,我們就可以使用"*","+"這些量詞。
例如:郵箱地址,那麼在"@"字元前允許出現若干字元作為使用者名稱。這時候我們就可以使用"\w+"來描述這裡至少出現一個單詞字元了。
"+":表示內容可以連續出現至少1次以上
"*":表示內容出現0-若干次
"?":表示內容出現0-1次
{n}、{n,}{n,m}

除了量詞外,有時我們也需要要求內容出現的次數有具體要求。比如手機號碼。這時我們要求出現的數字就不能是一個模糊的概念了,而必須要求11位。又比如我們要求使用者輸入密碼時,要求密碼是6-15位。遇到這類問題是,我們可以使用:
{n}:表示內容必須出現n次
{n,m}:表示內容出現n-m次
{n,}:表示內容出現至少n次
例如:
\d{11}:就表示數字只能出現11位,這樣就解決了上述的問題。
 分組

通過上面的內容,我們還無法解決類似下面的問題:
在描述電話號碼時,前面有區號,區號的形式可以是0086或者+86
那麼我們如何在這兩個字串之間選擇?
這時我們可以使用分組"()"
():可以將內容看做一個整體
()中可以使用"|"來表示或關係。例如:

(+86|0086):表示這裡可以是+86或者0086。

\. 表示符號   .表示任意一個符號


String正則相關API

1. matches方法

matches()方法的參數要求我們傳入一個用字串描述的Regex,然後使用該Regex描述的字串格式規則來匹配當前字串,若滿足那麼該方法返回true。否則返回false.

^[0-9]{5,8}&
java 中 string的方法match 就是全匹配,不寫^$也是可以的

 


2. split方法

String[] split(String regex):參數要求傳入一個用字串描述的Regex,然後使用該Regex描述的字串規則來匹配當前字串,並按照滿足的部分將字串拆分。

 1 案例一 2  3 /** 4          * 切割字串 當字串中最後的內容練習滿足Regex要求時 切除的Null 字元串全部忽略 5          */ 6         String str2 = "java.cpp.php.py.c#"; 7         String[] array = str2.split("\\."); 8         System.out.println(array.length); 9         System.out.println(Arrays.toString(array));10     }11 }
案例二            /**         *1. 將圖片名根據.拆分         *2.取第二項(尾碼名)         *3.產生系統時間的毫秒值,拼上尾碼          *          */        String imgName = "11.jpg";        String[] names = imgName.split("\\.");        String ln =names[1];        imgName=System.currentTimeMillis()+"."+ln; //系統時間        System.out.println(imgName);                    }

 

3. replaceAll方法
滿足則替換
String replaceAll(String regex,String replacement):參數要求傳入一個用字串描述的Regex和一個需要替換的字串,然後使用該Regex描述的字串規則來匹配當前字串,並將滿足的部分替換為需要替換的這個字串。

    String str3 ="abc123cef8df77";        str3 =str3.replaceAll("\\d+", "數字");        System.out.println(str3);和諧髒話            String regex1 = "(sb|qnmlgb|cnm|tmd)";         String message ="你個sb!怎麼操作!tnnd";         message = message.replaceAll(regex1, "***");         System.out.println(message);

 

Regex在Java中使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.