java正則表達式學習

表達式可匹配
[ab5@] 匹配"a" 或"b" 或"5" 或"@"
[^abc] 匹配"a","b","c" 之外的任意一個字符
[f-k] 匹配"f"~"k" 之間的任意一個字母

[^A-F0-3]  匹配"A"~"F","0"~"3" 之外的任意一個字符

修飾匹配次數的特殊符號

{n} 表達式重複n 次,比如:"\w{2}" 相當於"\w\w";"a{5}" 相當於"aaaaa"
{m,n} 表達式至少重複m 次,最多重複n 次,比如:"ba{1,3}"可以匹配"ba"或"baa"或"baaa"
{m,} 表達式至少重複m 次,比如:"\w\d{2,}"可以匹配"a12","_456","M12344"...
? 匹配表達式0 次或者1 次,相當於{0,1},比如:"a[cd]?"可以匹配"a","ac","ad"
+ 表達式至少出現1 次,相當於{1,},比如:"a+b"可以匹配"ab","aab","aaab"...
* 表達式不出現或出現任意次,相當於{0,},比如:"\^*b"可以匹配"b","^^^b"...

其他一些代表抽象意義的特殊符號

^ 與字符串開始的地方匹配,不匹配任何字符
$ 與字符串結束的地方匹配,不匹配任何字符
\b  匹配一個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符

可以影響表達式內部的子表達式之間的關係的符號

| 左右兩邊表達式之間"或" 關係,匹配左邊或者右邊, 和括號配合使用;
( ) (1). 在被修飾匹配次數的時候,括號中的表達式可以作爲整體被修飾;
(2). 取匹配結果的時候,括號中的表達式匹配到的內容可以被單獨得到;

注意:

中文匹配:[\u4E00-\u9FA5]

如果不想區分大小寫可以new RegExp(/^...$/i);的形式, i 是ignore 的簡寫

匹配次數中的貪婪與非貪婪

(d)(\w+) "\w+" 將匹配第一個"d" 之後的所有字符"xxxdxxxd"

(d)(\w+)(d) "\w+" 將匹配第一個"d" 和最後一個"d" 之間的所有字符"xxxdxxx"。雖然"\w+"也能夠匹配上最後一個"d",但是爲了使整個表達式匹配成功,"\w+" 可以"讓出" 它本來能夠匹配的最後一個"d"。

(d)(\w+?) "\w+?" 將儘可能少的匹配第一個"d" 之後的字符,結果是:"\w+?" 只匹配了一個"x"

(d)(\w+?)(d) 爲了讓整個表達式匹配成功,"\w+?" 不得不匹配"xxx" 纔可以讓後邊的"d" 匹配,從而使整個表達式匹配成功。因此,結果是:"\w+?" 匹配"xxx"。

反向引用\1, \2...
其實,"小括號包含的表達式所匹配到的字符串" 不僅是在匹配結束後纔可以使用,在匹配過程中也可
以使用。表達式後邊的部分,可以引用前面"括號內的子匹配已經匹配到的字符串"。引用方法是"\" 加
上一個數字。"\1" 引用第1 對括號內匹配到的字符串,"\2" 引用第2 對括號內匹配到的字符串……以此
類推,如果一對括號內包含另一對括號,則外層的括號先排序號。換句話說,哪一對的左括號"(" 在前,
那這一對就先排序號。

預搜索,不匹配;反向預搜索,不匹配

其他通用規則

\xXX 編號在0 ~ 255 範圍的字符,比如:空格可以使用"\x20" 表示
\uXXXX 任何字符可以使用"\u" 再加上其編號的4 位十六進制數表示,比如:"\u4E2D"

\S 匹配所有非空白字符("\s" 可匹配各個空白字符)
\D 匹配所有的非數字字符
\W 匹配所有的字母、數字、下劃線以外的字符
\B 匹配非單詞邊界,即左右兩邊都是"\w" 範圍或者左右兩邊都不是"\w" 範圍時的字符縫隙

添加"\" 才能匹配該字符本身的字符彙總

^、$ 、( ) 、[ ] 、{ } 、. 、? 、+ 、


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章