專用通道>

您當前所在位置: 首頁 > 行業新聞 > IT技術討論 >

IT技術討論

JAVA正則表達式

發布者:亚游成都錦江點擊: 分享到
一、正則表達式基本的原字符(meta character)以及它們含義 . 匹配任意一個字符 $匹配一行的結尾 ^匹配一行的開頭(在[]裏麵表示否定) {}定義了一個範圍 [] 定義了一個字符類 () 定義了一個

一、正則表達式基本的原字符(meta character)以及它們含義

. 匹配任意一個字符 $匹配一行的結尾 ^匹配一行的開頭(在[]裏麵表示否定)   {}定義了一個範圍  [] 定義了一個字符類 () 定義了一個組

*前麵出現0次以上   + 前麵匹配一次以上 ?前麵出現0次或一次  

後麵的字符不會看作metacharacter  w 字母數字下劃線 W 非字母數字下劃線  d 單個數字 D單個非數字 s空格字符(空格鍵、tab、換行、換頁、回車)  S非空格字符

| 或,二者之一 &&與操作符   b單詞邊界
申請免費試學】【在線報名在線谘詢

下麵看看幾個簡單的例子:

[abc] a、b 或 c(簡單類)

[^abc] 任何字符,除了a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](並集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
申請免費試學】【在線報名在線谘詢

二、Pattern類

Pattern類有如下常用方法:

Pattern pattern = Pattern.compile(regex);     //創建一個Pattern對象

Matcher matcher = pattern.matcher(string);      //得到Matcher對象,通過find方法可以找到匹配對象,如果有匹配的部分返回真,使用m.group方法得到匹配的各組值,否則find方法返回false。

public String[] split(CharSequence input)

這個方法提供了強大的功能,因為它可以使用正則表達式來作為token的分割;

split的一個重載的版本:

public String[] split(CharSequence input, int limit)
申請免費試學】【在線報名在線谘詢

它指定了劃分的組數,有以下三種情況:

limit==0

這時候和沒有limit參數的那個split效果一樣

limit>0

如果你僅僅對前limit個感興趣,你可以使用limit.

代碼如下:

[java]

1
2
3
4
5
6
public static void main(String[] args) { 
    String str = "Hello, Dolly, You, Are, My, Favorite"
    String [] result = str.split(",|and"5); 
    for(String r : result) 
        System.out.println(r); 
}

申請免費試學】【在線報名在線谘詢
        三、Matcher類

使用Matcher類,最重要的一個概念必須清楚:組(Group),在正則表達式中()定義了一個組,由於一個正則表達式可以包含很多的組,所以下麵先說說怎麽劃分組的, 以及這些組和組的下標怎麽對應的。

以 "w(dd)(w+)" 為例:

這個正則表達式有三個組:

整個w(dd)(w+) 是第0組 group(0) ;(dd)是第1組 group(1) ;(w+)是第2組 group(2)

亚游看看和正則表達式匹配的一個字符串x99SuperJava,

group(0)永遠都是匹配整個表達式的字符串的那部分x99SuperJava ;group(1)是第1組(dd)匹配的部分:99 ;group(2)是第二組(w+)匹配的那部分SuperJava

亚游看看如何用代碼實現:

[java]

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) { 
    String regex = "\w(\d\d)(\w+)"
    String candidate = "x99SuperJava y88Java"
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(candidate); 
    while(m.find()){ 
        int gc = m.groupCount(); 
        for(int i = 0; i <= gc; i++) 
            System.out.println(m.group()); 
    
}

注意:在調用m.group()函數前一定要先調用m.find();要不會拋出異常。

Matcher類有如下常用方法:

public Pattern pattern()

這個方法返回了,創建Matcher的那個pattern對象。

public int start()

這個方法返回了,Matcher所匹配的字符串在整個字符串的的開始下標:

public int end()

這個和start()對應,返回在以前的匹配操作期間,由給定組所捕獲子序列的最後字符之後的偏移量。

其實start和end經常是一起配合使用來返回匹配的子字符串。

public int start(int group)

這個方法可以指定你感興趣的sub group,然後返回sup group匹配的開始位置。

public String group()

返回由以前匹配操作所匹配的輸入子序列。

這個方法提供了強大而方便的工具,他可以等同使用start和end,然後對字符串作substring(start,end)操作。

public String group(int group)

這個方法提供了強大而方便的工具,可以得到指定的group所匹配的輸入字符串;

public int groupCount()

這個方法返回了,正則表達式的匹配的組數。

public boolean find()

find會在整個輸入中尋找是否有匹配的子字符串,一般亚游使用find的流程:

while(matcher.find(){

}

public boolean matches()

嚐試將整個區域與模式匹配。這個要求整個輸入字符串都要和正則表達式匹配。

和find不同, find是會在整個輸入字符串查找匹配的子字符串。
     【申請免費試學】【在線報名在線谘詢

 



亚游谘詢老師

成都優越教育谘詢有限公司(亚游成都錦江校區介紹)

成都優越教育谘詢有限公司(亚游成都錦江校區)是亚游總部在成都設立的一家示範校區。涵蓋ACCP、Java、.Net、網絡營銷、市場營銷,遊戲開發等多專業校區,承擔教學、就業示範、以及教師培養輸送等職責。
亚游作為北京大學下屬的專業計算機學校,以北京大學強大師資作為依托,連續13年被評為“中國IT教育第一品牌”,累計培養60+萬優秀軟件工程師,是名符其實的軟件工程師的搖籃……請認準品牌名校——亚游成都錦江校區,地址:成都市春熙路北口東行500米(大慈寺22號)。