1. 程式人生 > 其它 >期末複習之Java正則表示式的二次回顧

期末複習之Java正則表示式的二次回顧

正則表示式

個人看來,正則表示式的功能是非常強大的,但是也是難以理解的,需要多多練習,並且多輪複習才能完全融入自己的腦子中。

正則表示式是一個強大的字串處理工具,可以對字串進行查詢、提取、分割、替換等操作,String類中提供了一些關於正則表示式的方法:

  • boolean matches(String regex):判斷該字串是否匹配指定的正則表示式。
  • String replaceFirst(String regex,String replacement):將該字串中第一個匹配regex的子串替換成replacement
  • String[] split(String regex):將
    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()); }