期末複習之Java正則表示式的二次回顧
正則表示式
個人看來,正則表示式的功能是非常強大的,但是也是難以理解的,需要多多練習,並且多輪複習才能完全融入自己的腦子中。
正則表示式是一個強大的字串處理工具,可以對字串進行查詢、提取、分割、替換等操作,String類中提供了一些關於正則表示式的方法:
- boolean matches(String regex):判斷該字串是否匹配指定的正則表示式。
- String replaceFirst(String regex,String replacement):將該字串中第一個匹配regex的子串替換成replacement。
-
String[] split(String regex):將
1.建立正則表示式
正則表示式就是一個用於匹配字串的模板,可以匹配一批字串,所以建立正則表示式就是建立一個特殊的字串。
1.1正則表示式的特殊字元及含義 :
字元 |
解釋 |
\t |
製表符 |
\n |
換行符 |
\r |
回車符 |
$ |
匹配一行的結尾,如果要匹配$字串,使用\$ |
^ |
匹配一行的開始,如果要匹配^字串,使用\^ |
() |
標記子表示式的開始和結束位置,如果要匹配(或者)使用\( 或者\) |
[] |
用於確定中括號表示式的開始和結束位置。 |
{} |
用於標記前面子表示式的出現頻率 |
* |
指定前面子表示式可以出現零次或多次 |
+ |
指定前面子表示式可以出現一次或者多次 |
? |
指定前面子表示式可以出現零次或者一次 |
. |
匹配除了換行符\n之外的任何單字元。 |
\ |
用於轉義下一個字元。 |
| |
指定兩項之間任選一項,在小括號中 |
1.2預定義字元:
字元 | 解釋 |
\d | 匹配0-9的所有數字 |
\D | 匹配所有的非數字 |
\s | 匹配所有的空白字元,包括空格,製表符,回車符,換行符,換頁符 |
\S | 匹配所有的非空白字元 |
\w | 匹配所有的單詞字元,包括0-9的所有數字,26個英文字母和下劃線 |
\W | 匹配所有的非單詞字元 |
1.3方括號表示式:
字元 | 解釋 |
表示列舉 | [abc]表示a、b、c其中任意一個字元;[gz]表示g、z其中任意一個字元 |
表示範圍:- |
[a-f]表示a-f其中任意字元,範圍可以和列舉來結合使用, 例如,[a-fx-z]表示a-f和x-z的任意字元 |
表示否:^ | [^a-f]表示非a、b、c、d、e、f的任意字元 |
表示與:&& |
[a-z&&[d-f]]表示a-z和d-f的交集,結果為d、e、f的任意字元 [a-z&&[^ef]]表示a-z中除了ef之外的任意字元 [a-z&&[^d-f]]表示a-z中除了d-f之外的任意字元 |
表示“並”運算 | [a-cx-z]表示a-c的所有字元和x-z的所有字元 |
1.4花括號表示式:
字元 | 解釋 |
x{n} | x表示式出現n次 |
x{n,} | x表示式至少出現n次 |
x{n,m} | x表示式出現n到m次 |
1.5正則表示式案例:
1.手機號碼:
^(13[0-9]|14[57]|15\d|18[\d&&[^4]])\d{8}$
2.身份證號碼
(^\d{18}$|^\d{17}(\d|X|x)$)
3.騰訊QQ號
^([0-9][1-9]{4,14})$
2.使用正則表示式
在程式中如果要使用正則表示式,就可以利用Java 裡面的Pattern和Matcher類來使用正則表示式。
Pattern物件是正則表示式編譯後在記憶體中的表現形式,因此正則表示式字串必須先被編譯為Pattern物件(通過Pattern的compile方法實現),然後再利用該Pattern物件建立對應的Matcher物件(通過Pattern的matcher方法實現)。執行匹配所涉及的狀態保留在Matcher物件中,多個Matcher物件可以共享一個Pattern物件。
示例:
Pattern pattren = pattren.compile("^-[1-9][0-9]*$"); Matcher m = pattren.matcher("12"); System.out.println(m.matches());
如果某個正則表示式僅需要一次使用,則可以直接使用Pattern類的靜態matches方法,此方法自動把指定字串編譯成匿名的Pattern物件,並執行匹配。
示例:
boolean flag = Pattern.matches("+?[1-9][0-9]*$","12"); System.out.println(flag);
Matcher類的常用方法:
boolean matches():返回當前匹配結果,匹配成功返回true,反之返回false。
reset方法用於重新匹配字串。
示例:
String[] mails = {"[email protected]","[email protected]","[email protected]"};
Pattern pattern = Pattern.compile("\\w{3,20}@\\w+\\.(com|net|org|gov|com\\.cn)");
Matcher matcher = null;
for (String mail : mails){ if (matcher == null){ matcher = pattern.matcher(mail); }else { matcher = matcher.reset(mail); } System.out.println(matcher.matches()); }