黑馬程式設計師 正規表示式

2022-09-12 07:48:13 字數 4372 閱讀 4982

正規表示式

正規表示式用於操作字串資料。通過一些特定的符號來體現的。所以我們為了掌握正規表示式,必須要學習一些符號。

正規表示式可以簡化對字串的複雜操作。雖然簡化了操作,但是閱讀性差。

1、常見符號

說明:x表示字元x或者匹配的規則。

1、字元

x                  字元 x

\\                 反斜線字元

\t                 製表符 ('\u0009')

\n                 新行(換行)符 ('\u000a')

\r                 回車符 ('\u000d')

\f                 換頁符 ('\u000c')

\a                 報警 (bell) 符 ('\u0007')

2、字元類

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

3、預定義字元類

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

\d                        數字:[0-9]

\d                       非數字: [^0-9]

\s                        空白字元:[ \t\n\x0b\f\r]

\s                       非空白字元:[^\s] 

\w                       單詞字元:[a-za-z_0-9]

\w                      非單詞字元:[^\w]

4、邊界匹配器

^                         行的開頭

$                         行的結尾

\b                        單詞邊界

\b                       非單詞邊界

\a                       輸入的開頭

\g                       上乙個匹配的結尾

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

\z                        輸入的結尾

5、greedy數量詞

x?                       x,一次或一次也沒有

x*                       x,零次或多次

x+                       x,一次或多次

x                    x,恰好 n次

x                   x,至少 n次

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

6、組和捕獲

捕獲組可以通過從左到右計算其開括號來編號。例如,在表示式 ((a)(b(c)))中,存在四個這樣的組:

1     ((a)(b(c)))

2     \a

3     (b(c))

4     (c)

組零始終代表整個表示式。在替換中常用$匹配組的內容。

2、功能

正規表示式常見功能:匹配、切割、替換、獲取

匹配其實使用的就是string類中的matches方法。

切割其實使用的就是string類中的split方法。

替換其實使用的就是string類中的replace方法。

獲取將正則規則進行物件的封裝。pattern p = pattern.compile("a*b");通過正則物件的matcher方法字串相關聯。獲取要對字串操作的匹配器物件matcher。

演示匹配:

1

static

void

demo1()2";

6boolean b =tel.matches(regex);

7 system.out.println(tel + ":" +b);

8 }

演示切割:

1

static

void

demo2()

29 str = "zhangsan.xiaoqiang.zhaoliu";

10//

以點為分隔符

11 names = str.split("\\.");

12for

(string name : names)

1516 str = "zhangsanttttxiaoqiangmmmmmzhaoliu";

17//.

表示任意字元,(.)表示一組,\\1+表示與第1組相同的出現1次以上

18 names = str.split("(.)\\1+");

19for

(string name : names)

22 }

演示替換: 

1

public

static

void

demo5()

2)(\\d)(\\d)","$1****$2");

11system.out.println(str);

12 }

演示獲取:

1

static

void

demo6()

2\\b";6//

1. 將正則封裝成物件

7 pattern p =pattern.compile(regex);8//

2. 通過正則物件獲取匹配器物件

9 matcher m =p.matcher(str);

10//

查詢:find();

11while

(m.find())

12

16 }

pattern類為正規表示式的編譯表示形式。指定為字串的正規表示式必須首先被編譯為此類的例項。然後,可將得到的模式用於建立matcher物件,依照正規表示式,該物件可以與任意字串行匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。

下面通過一些小練習來熟悉一下正規表示式

1

import j**a.util.*;

2class

myregex 38

/*91. **口吃:我我 ... 我我 ... 我我我我 ... 要要要要 ...

10要要要要 ... 學學學學學 ...學學編編 ... 編編編編 .. 編 .. 編 ... 程程 ... 程程程

11除去重複的字元。

12*/

13static

void

exec01()

1422 }

結果為:

/*92、對郵件位址的校驗

10*/

11static

void

exec02()

12)+";

16//

不精確的校驗可以寫為「\\w+@\\w+(\\.\\w)+」;

17boolean b=mail.matches(regex);

18system.out.println(b);19}

20 }

結果為真

正規表示式主要在於符號的熟悉,需要勤加練習,多練就能記住各個符號,就能熟能生巧,寫出高效的正規表示式。

黑馬程式設計師 正規表示式

asp.net android io開發s net培訓 期待與您交流!正規表示式 定義 其實是用來操作字串的一些規則。好處 正則的出現,對字串的複雜操作變得更為簡單。特點 將對字串操作的 用一些符號來表示。只要使用了指定符號,就可以呼叫底層的 對字串進行操作。符號的出現,簡化了 的書寫。弊端 符號的...

黑馬程式設計師 正規表示式

正規表示式 某個描述字串物件是不是跟符合我設定的語法規則。public class test w com org com cn 這個字串表示 在大小寫英文,和數字組合的字串 長度為7 13之間 中間有 隔開郵箱型別,郵箱型別長度3 5之間,尾部字尾 com org 或 com.cn system.o...

黑馬程式設計師 正規表示式

asp.net android ios開發 net培訓 期待與您交流!正規表示式 a za z 代表其中的乙個 表否 為任意,當用來split分是要注意得 d和 0 9 相同,d和 0 9 相同 w單詞字元 a a z 0 9 w為非單詞字元 w x?代表前面可有1次,可沒有 x 為x0次或x多次 ...