正規表示式
正規表示式用於操作字串資料。通過一些特定的符號來體現的。所以我們為了掌握正規表示式,必須要學習一些符號。
正規表示式可以簡化對字串的複雜操作。雖然簡化了操作,但是閱讀性差。
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 }
1pattern類為正規表示式的編譯表示形式。指定為字串的正規表示式必須首先被編譯為此類的例項。然後,可將得到的模式用於建立matcher物件,依照正規表示式,該物件可以與任意字串行匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。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 }
下面通過一些小練習來熟悉一下正規表示式
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多次 ...