一張思維導圖,讓正則表達式不再難懂
作者:java思維導圖
本文通過一張精彩的思維導圖,讓你對正則表達式不再覺得難懂,快來看看吧。
一張精彩的導圖
導圖內(nèi)容解析
- 語法結(jié)構(gòu)
- 字符
- 普通字符:字母、數(shù)字、漢字、下劃線,匹配與之相同的一個字符
- 簡單轉(zhuǎn)義字符:\n(換行),\t(制表),\\(\本身)和 \^...(\^等有特殊作用的符號如要匹配自己的話要用轉(zhuǎn)義)
- 標準字符集合
注意區(qū)分大小寫,大寫是相反的意思,匹配相反是不匹配- \d
任意一個數(shù)字,0~9 - \w
任意一個字母、數(shù)字、漢字或下劃線,A~Z、a~z、0~9、_和任意一個漢字 - \s
任意空白符,包括空格、制表符、換行符 - .
小數(shù)點可以匹配任意一個字符,換行除外(如果要匹配包括"\n"在內(nèi)的所有字符,一般用[\s\S])
- \d
- 自定義字符集合
[ ]方括號匹配方式,能夠匹配方括號中的任意一個字符,^表示取反- [ab5@]
匹配"a"或"b"或"5"或"@" - [^abc]
匹配a、b、c之外的任意字符 - [f-k]
匹配“f"到"k"之間的字符 - [^A-F0-3]
匹配“A"-"F","0"-"3"之外的任意一個字符
- [ab5@]
- 量詞(Quantifier)
修飾前面的一個表達式,如果要修飾多個表達式,就用( )把表達式包起來- {n}
表達式重復n次 - {m,n}
表達式至少重復m次,最多重復n次- 貪婪模式 (默認)
匹配符合的最長的字符串 - 非貪婪模式 (在量詞后面加 ? 例:{m,n}? )
匹配符合的最短的字符串
- 貪婪模式 (默認)
- {m,}
表達式至少重復m次 - ?
匹配表達式0或1次,相當于{0,1} - +
表達式至少出現(xiàn)一次,相當于{1,} - *
表達式不出現(xiàn)或出現(xiàn)任意次,相當于{0,}
- {n}
- 字符邊界
零寬:匹配的不是字符而是位置,符合某種條件的位置- ^
與字符串開始的地方匹配 - $
與字符串結(jié)束的地方匹配 - \b
匹配一個單詞的邊界,當前位置前面的字符和后面的字符不全是\w
- ^
- 預搜索(零寬斷言、環(huán)視)
零寬:匹配的不是字符而是位置,符合某種條件的位置- (?=exp)
斷言自身出現(xiàn)的位置的后面能匹配表達式exp - (?!exp)
斷言自身出現(xiàn)的位置的后面不能匹配表達式exp - (?<=exp)
斷言自身出現(xiàn)的位置的前面能匹配表達式exp - (?<!exp)
斷言自身出現(xiàn)的位置的前面不能匹配表達式exp
- (?=exp)
- 匹配模式
對文本的處理方式- IGNORECASE 忽略大小寫模式
- 匹配時忽略大小寫
- 默認是區(qū)分大小寫的
- SINGLELINE 單行模式
- 整個文本看作一個字符串,只有一個開頭一個結(jié)尾
- 使小數(shù)點"."可以匹配包含換行符(\n)在內(nèi)的任意字符
- MULTILINE 多行模式
- 每行都是一個字符串
- 在多行模式下,如果需要僅匹配字符串開始和結(jié)束位置,可以使用\A和\Z
- IGNORECASE 忽略大小寫模式
- 選擇符和分組
分支結(jié)構(gòu)、捕獲組合非捕獲組- | 分支結(jié)構(gòu)
左右表達式之間“或”關(guān)系,匹配左邊或右邊 - ( ) 捕獲組
- (1)、在被修飾匹配次數(shù)的時候,括號中的表達式可以作為整體被修飾
- (2)、取匹配結(jié)果的時候,括號中的表達式匹配到的內(nèi)容可以被單獨得到
- (3)、每一對括號會分配一個編號,使用()的捕獲根據(jù)左括號的順序從1開始自動編號。捕獲編號為零的***個捕獲是整個正則表達式模式匹配的文本
- 反向引用:通過反向引用,可以對分組已捕獲的字符串進行引用。
- (?:Expression) 非捕獲組
一些表達式中,不得不使用(),但又不需要保存()中子表達式匹配的內(nèi)容,這時可以用非捕獲組來抵消()帶來的副作用。
- | 分支結(jié)構(gòu)
責任編輯:龐桂玉
來源:
java思維導圖的博客