1. 程式人生 > >Java字符串整理筆記(四)

Java字符串整理筆記(四)

情況 lan gen 英文字母 元字符 電話 log util 查找

 6. 使用正則表達式

  正則表達式是一種描述字符串集的方法,是以字符串集合中各字符串的共有特征為依據的。在程序開發中,正則表達式被廣泛地應用在字符串的

查找、替換、匹配等情況下,因此靈活地使用正則表達式對程序員非常重要。正則表達式中含有一些具有特殊意義的字符,這些字符稱為正則表達式的元字符。

正則表達式中字符及其意義如下:

元字符        正則表達式的寫法     含義
 .            “."            代表任意一個字符
\d      “\\d" 代表0~9的任何一個數字 \D      “\\D” 代表任何一個非數字字符 \s      “\\s” 代表空白字符,如“\t”、“\n”
\S        “\\S” 代表非空白字符
\W        “\\W” 代表不可用於標識符的字符
\p{Lower}    “\\p{Lower}”  代表小寫字母{a~z}
\p{Upper}    “\\p{Upper}”  代表大寫字母{A~Z}
\p{ASCII}    “\\p{ASCII}”  ASCII字符
\p{Alpha}    “\\p{Alpha}”  字母字符
\p{Digit}    “\\p{Digit}”  十進制數字,即[0~9]
\p{Alnum}    “\\p{Alnum}”  數字或字母字符
\p{Punct}    “\\p{Punct}”  標點符號:!"#%&‘()*+,-_/:;<=>?@[\]^_`{|}~
\p{Graph}    “\\p{Graph}”  可見字符:[\p{Alnum}\p{Punct}]
\p{Print}    “\\p{Print}”  可打印字符:[\p{Graph}\x20]
\p{Blank}    “\\p{Blank}”  空格或制表符:[\t]
\p{Cntrl}    “\\p{Cntrl}”  控制字符:[\x00-\x1F\x7F]
說明:在正則表達式中,“.”代表任何一個字符,因此在正則表達式中如果想使用普通意義的字符“.”,必須使用轉義字符“\”。

  在正則表達式中,可以使用方括號括起來若幹個字符來表示一個元字符,該元字符可代表方括號中的任何一個字符,例如“ reg="[abc]4" ”,字符串“a4”、“b4”、“c4”

都是和正則表達式匹配的字符串。方括號元字符還可以為其它格式,具體如下所示:

//[^456]:代表4、5、6之外的任何字符。
//[a-r]:代表a~r的任何一個。
//[a-zA-Z]:可表示任意一個英文字母。
//[a-e[g-z]]:代表a~e,或g~z中的任何一個字母(並運算)。
//[a-o&&[def]]:代表d、e、f(交運算)。
//[a-d&&[^bc]]:代表字母a、d(差運算)。

  在正則表達式中允許使用限定修飾符來限定元字符出現的次數,如“A*”代表A可在字符串中出現0次或多次。修飾限定符的用法如下所示:

限定修飾符      意義                  示例
  ?     0次或1次          A?
  *     0次或多次          A*
  +     一次或多次         A+
  {n}     正好出現n次        A{2}
  {n,}    至少出現n次 A{5,}
  {n,m}   出現n~m次         A{3,8}

  實例6.1,創建類CheckOut,在該類中的主方法中定義驗證字符串是否為合法的手機號碼的方法,代碼如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CheckOut {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String regex="0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}"
                +"|13[0-9]\\d{8}|15[1089]\\d{8}";    //驗證手機號碼的正則表達式
        String str="13412345678";                    //要進行驗證的手機號碼
        Pattern pattern=Pattern.compile(regex);        //編譯正則表達式
        Matcher matcher=pattern.matcher(str);        //創建給定輸入模式的匹配器
        boolean bool=matcher.matches();
        if(bool==true) {                            //如果驗證為真
            System.out.println("合法的正則表達式");        //給出提示信息
        } else {                                    //如果驗證為假
            System.out.println("不合法的正則表達式");
        }
    }

}

  實例6.1執行的結果為:合法的正則表達式。

  說明:電話號碼包括固定電話和手機號碼,其中,固定電話是由區號和號碼組成,區號以0開頭的,後面是2~3位數,因此在匹配區號的時候,可以使用

正則表達式“0\d{2,3}”,固定電話號碼是由7~8位數字組成,因此可以使用表達式“\d{7,8}”來進行匹配。因為固定電話的組合方式可能是“區號-號碼”或者是

“區號 號碼”,因此,匹配固定電話號碼,可以使用表達式“0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}”。手機號碼是11位數,並以數字“1”開頭,考慮到手機號碼

的特殊性,則以正則表達式“13[0-9]\\d{8}|15[1089]\\d{8}”來對手機號碼進行匹配。

Java字符串整理筆記(四)