【Java常用類庫】_Regex筆記

來源:互聯網
上載者:User

【Java常用類庫】_Regex筆記

本章目標:
掌握Regex的作用
掌握Regex的匹配模式
掌握Pattern類和Matcher類的使用
掌握String對正則的支援

例如:現在要求判斷一個字串是否由數字組成,則可以有以下的兩種做法:
1.不使用正則;
2.使用正則;

執行個體一:

public class RegexDemo01{    public static void main(String[] args){        String str = "1234567890";    //此字串由數字組成        boolean flag = true;        //定義一個標識變數        char[] c = str.toCharArray();    //將字串變為字元數組        for(int i=0;i<c.length;i++){            if(c[i]<'0'||c[i]>'9'){                flag = false;                break;        //程式不再向下繼續執行            }                }        if(flag){            System.out.println("是由數字組成!");        }else{                System.out.println("不是由數字組成!");        }        }}

執行個體二:

import java.util.regex.Pattern;public class RegexDemo02{    public static void main(String[] args){        String str = "13456789";    //此字串由數字組成        if(Pattern.compile("[0-9]+").matcher(str).matches()){            System.out.println("是由數字組成!");        }else{            System.out.println("不是由數字組成!");        }        }}

可以發現使用正則作業碼更加簡單。

3.2、Pattern、Matcher類

這兩個類都定義在java.util.regex包中

Pattern類的主要作用是進行正則規範(如之前的“[0-9]”就屬於正則規範)
而Matcher類主要是執行規範,驗證一個字串是否符合其規範。

常用正則規則一:

No    規範        描述
1    \\        表示反斜線(\)字元
2    \t        表示定位字元
3    \n        表示換行
4    [abc]        字元a、b或c
5    [^abc]        除a、b、c之外的任一字元
6    [a-zA-Z0-9]    表示由數字、字母組成
7    \d        表示數字
8    \D        表示非數字
9    \w        表示數字、字母、底線
10    \W        表示非數字、字母、底線
11    \s        表示所有空白字元(換行、空格等)
12    \S        表示所有非空白字元
13    ^        行的開頭
14    $        行的結尾
15    .        匹配除換行外的任意一個字元

\d:表示數字,[0-9]
\D:表示非數字,[^0-9]
\w:表示字母、數字、底線,[a-zA-Z0-9]
\W:[^a-zA-Z0-9]

常用正則規則二:

數量表示(X表示一組規範)

No    規範        描述
1    X        必須出現一次
2    X?        可以出現0次或1次
3    X*        可以出現0次或多次
4    X+        可以出現一次或多次
5    X{n}        可以出現N次
6    X{n,}        可以出現N次以上
7    X{n,m}        必須出現n次到m次

邏輯運算子(X、Y表示一組規範)

No    規範        描述
1    XY        X規範後跟著Y規範
2    X|Y        X規範或Y規範    
3    (X)        做為一個捕捉組規範

以下的正則,如果要想驅動起來,則必須依靠Pattern或Matcher類。
Pattern主要是表示一個規則的意思,即:Regex的規則需要在Pattern類中使用。
Matcher類主要表示使用Pattern指定好的驗證規則。

Pattern類的常用方法

No    方法                        類型    描述
1    public static Pattern compile(String regex)    普通    指定Regex規則    
2    public Matcher matcher(CharSequence input)    普通    返回Matcher類執行個體
3    public String[]    split(CharSequence input)    普通    字串拆分

在Pattern類中如果要想取得Pattern類執行個體,則必須調用compile()方法。

本類中沒有明確的構造方法可以供使用者使用,那麼肯定此類的構造方法被私人化了,則可以直接從Pattern類中取得本類的執行個體。
指定好操作的正則:public static Pattern compile(String regex)
可以為matcher類執行個體化:public Matcher matcher(CharSequence input)
拆分:public String[] split(CharSequence input)
    回顧:String 中也存在拆分操作。

Matcher類的常用方法:
如果要驗證一個字串是否符合規範,則可以使用Matcher類

No    方法                        類型        描述
1    public boolean matches                普通        執行驗證
2    public String replaceAll(String replacement)    普通        字串替換

執行個體二:驗證一個字串是否是合法的日期格式

import java.util.regex.Pattern;import java.util.regex.Matcher;public class RegexDemo03{    public static void main(String args[]){        String str = "1983-07-27";        String pat = "\\d{4}-\\d{2}-\\d{2}";        Pattern p = Pattern.compile(pat);    //執行個體化Pattern類        Matcher m = p.matcher(str);        //執行個體化Matcher類        if(m.matches()){        //進行驗證的匹配,使用正則            System.out.println("日期格式合法!");        }else{            System.out.println("日期格式不合法!");        }    }}

在Pattern類中也可以使用正則進行字串的拆分功能。

import java.util.regex.Pattern;import java.util.regex.Matcher;public class RegexDemo04{    public static void main(String args[]){        String str = "A1B22C333D444E55555F";        String pat = "\\d+";    //指定好Regex        Pattern p = Pattern.compile(pat);        String s[] = p.split(str);    //執行拆分操作        for(int x=0;x<s.length;x++){            System.out.println(s[x]+"\t");        }    }}

還可以使用Matcher類中的替換功能。

範例:將字串中的全部數字替換成“_”

import java.util.regex.Pattern;import java.util.regex.Matcher;public class RegexDemo05{    public static void main(String args[]){        String str = "A1B22C333D444E55555F";        String pat = "\\d+";    //指定好Regex        Pattern p = Pattern.compile(pat);        Matcher m = p.matcher(str);        String newString = m.replaceAll("_");        System.out.println(newString);        }}

只要使用正則的驗證的規則,那麼就可以匹配各種複雜的字串。

3.3、String 類對正則的支援

從之前的操作中,可以發現,很多的代碼除了要求的字串不同,使用的正則規則不同,基本上就沒有什麼特別的了。
所以在JDK1.4之後,java對正則進行了一些擴充,在String 中開始直接支援正則的操作。

String 對Regex的支援

在String 類中有以下三個方法是支援正則操作的。

No.    方法                                類型    描述
1    public boolean matches(String regex)                普通    字串匹配
2    public String replaceAll(String regex,String replacement)    普通    字串替換
3    public String[]    split(String regex)                普通    字串拆分

import java.util.regex.Pattern;import java.util.regex.Matcher;public class RegexDemo06{    public static void main(String[] args){        String str = "A1B22C333D444E55555F".replaceAll("\\d+","_");        boolean temp = "1982-07-27".matches("\\d{4}-\\d{2}-\\d{2}");        String s[] = "A1B22C333D444E55555F".split("\\d+");        System.out.println("字串替換操作:"+str);        System.out.println("字串驗證:"+temp);        System.out.println("字串的拆分:");        for(int x=0;x<s.length;x++){            System.out.println(s[x]+"\t");        }    }}

但是,在使用正則的時候有一點是需要特別注意的。
現在,假設有如下一個字串的拆分程式。

import java.util.regex.Pattern;import java.util.regex.Matcher;public class RegexDemo07{    public static void main(String[] args){        String info = "LXH:98|MLDN:90|LI:100";        String s[] = info.split("\\|");        System.out.println("字串拆分:");        for(int x=0;x<s.length;x++){            String s2[] = s[x].split(":");            System.out.println(s2[0]+"\t"+s2[1]);        }    }}

如果有時候發現一個字串無法按照指定的字元拆分的話,則需要使用"\"轉義,轉義的時候兩個"\"表示一個"\"。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.