標籤:
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中使用