當前位置:才華齋>IT認證>JAVA認證>

java中正則表示式概述

JAVA認證 閱讀(1.25W)

正則表示式是計算機科學的一個概念。正則表示式使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,正則表示式通常被用來檢索、替換那些符合某個模式的文字。那麼java正則表示式的內容是什麼呢?下面跟yjbys小編一起來看看吧!

java中正則表示式概述

  一、正則表示式到底是什麼東西?

在編寫處理字串的程式或網頁時,經常會有查詢符合某些複雜規則的字串的需要。正則表示式就是用於描述這些規則的工具。換句話說,正則表示式就是記錄文字規則的程式碼。

很可能你使用過Windows/Dos下用於檔案查詢的萬用字元(wildcard),也就是*和?。如果你想查詢某個目錄下的所有的Word文件的話,你會搜尋*。在這裡,*會被解釋成任意的字串。和萬用字元類似,正則表示式也是用來進行文字匹配的工具,只不過比起萬用字元,它能更精確地描述你的需求——當然,代價就是更復雜——比如你可以編寫一個正則表示式,用來查詢所有以0開頭,後面跟著2-3個數字,然後是一個連字號“-”,最後是7或8位數字的字串(像010-12345678或0376-7654321)。

  二、正則表示式的基本操作

正則表示式定義:符合一定規則的表示式。

作用:用於專門操作字串。

特點:用於一些特定的符號來表示一些程式碼操作。這樣就簡化書寫。所以學習正則表示式,就是在學習一些特殊符號的使用。

好處:可以簡化對字串的複雜操作。

弊端:符號定義越多,正則越長,閱讀性越差。

具體操作功能:

1,匹配:String matches方法。用規則匹配整個字串,只要有一處不符合規則,就匹配結束,返回false。

2,切割:String split();

3,替換:String replaceAll(regex,str);如果regex中有定義組,可以在第二引數中通過$符號獲取正則表示式中的已有的組。

4,獲取:將字串中的符合規則的子串取出。

操作步驟:

1),將正則表示式封裝成物件。

2),讓正則物件和要操作的字串相關聯。

3),關聯後,獲取正則匹配引擎。

4),通過引擎對符合規則的子串進行操作,比如取出。

  三、API文件中常用符號

字元類

[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](減去)

預定義字元類

.

任何字元(與行結束符可能匹配也可能不匹配)

d

數字:[0-9]

D

非數字: [^0-9]

s

空白字元:[ tnx0Bfr]

S

非空白字元:[^s]

w

單詞字元:[a-zA-Z_0-9]

W

非單詞字元:[^w]

邊界匹配器

^

行的開頭

$

行的結尾

b

單詞邊界

B

非單詞邊界

A

輸入的開頭

G

上一個匹配的結尾

Z

輸入的結尾,僅用於最後的結束符(如果有的話)

z

輸入的結尾

Greedy 數量詞

X?

X,一次或一次也沒有

X*

X,零次或多次

X+

X,一次或多次

X{n}

X,恰好 n 次

X{n,}

X,至少 n 次

X{n,m}

X,至少 n 次,但是不超過 m 次

  四、方法摘要

static Pattern

compile(String regex) 將給定的正則表示式編譯到模式中。

static Pattern

compile(String regex, int flags) 將給定的正則表示式編譯到具有給定標誌的.模式中。

int

flags() 返回此模式的匹配標誌。

Matcher

matcher(CharSequence input) 建立匹配給定輸入與此模式的匹配器。

static boolean

matches(String regex, CharSequence input) 編譯給定正則表示式並嘗試將給定輸入與其匹配。

String

pattern() 返回在其中編譯過此模式的正則表示式。

static String

quote(String s) 返回指定 String 的字面值模式 String。

String[]

split(CharSequence input) 圍繞此模式的匹配拆分給定輸入序列。

String[]

split(CharSequence input, int limit) 圍繞此模式的匹配拆分給定輸入序列。

String

toString() 返回此模式的字串表示形式。

  五、案例

1、匹配案例

1)電話號碼匹配案例

public static void checkTel()

{

String tel = "16900001111";

String telReg = "1[358]d{9}";

tln(hes(telReg));

}

2)數字和字母組成的字串匹配

public static void demo()

{

String str = "b23a23456789";

String reg = "[a-zA-Z]d*";

boolean b= hes(reg);

tln(b);

}

3)QQ號碼匹配

要求:5~15 0不能開頭,只能是數字

public static void checkQQ()

{

String qq = "123a454";

String regex = "[1-9]d{4,14}";

boolean flag = hes(regex);

if(flag)

tln(qq+" ok");

else

tln(qq+"... 不合法");

}

2、切割案例

按照.進行切割:splitDemo("wu",".");

按照進行切割:splitDemo("c:abc","\");

按照多個空格來進行切割:String reg = " +";空格+

按照疊詞切割:splitDemo("erkktyqqquizzzzzo","(.)1+");//按照疊詞完成切割。為了可以讓規則的結果被重用,可以將規則封裝成一個組。用()完成。組的出現都有編號。從1開始。 想要使用已有的組可以通過 n(n就是組的編號)的形式來獲取。

3、替換案例

將字串中的陣列替換成#。

String str = "wer1389980000ty1234564uiod234345675f";

replaceAllDemo(str,"d{5,}","#");

將重疊的字元替換成單個字母。zzzz->z

String str1 = "erkktyqqquizzzzzo";//

replaceAllDemo(str1,"(.)1+","$1");

4、獲取案例

獲取:將字串中的符合規則的子串取出。

public static void getDemo()

{

String str = "ming tian jiu yao fang jia le ,da jia。";

tln(str);

String reg = "b[a-z]{4}b";

//將規則封裝成物件。

Pattern p = ile(reg);

//讓正則物件和要作用的字串相關聯。獲取匹配器物件。

Matcher m = her(str);

//將規則作用到字串上,並進行符合規則的子串迴圈查詢。

while(())

{

//用於獲取匹配後結果。

tln(p());

tln(t()+"...."+());

}

}