date: 2018-12-09 14:35:00
元字符
代碼 | 說明 |
---|---|
. |
匹配除換行符以外的任意字符 |
\w |
匹配字母或數(shù)字或下劃線或漢字 |
\s |
匹配任意的空白符 |
\b |
匹配數(shù)字 |
^ |
匹配字符串的開始 |
$ |
匹配字符串的結(jié)束 |
轉(zhuǎn)義
當(dāng)需要匹配元字符本身時(shí),需要轉(zhuǎn)義穗酥,即: \元字符
重復(fù)
代碼 | 說明 |
---|---|
* |
重復(fù)零次或更多次 |
+ |
重復(fù)一次或更多次 |
? |
重復(fù)零次或一次 |
{m} |
重復(fù)n次 |
{m,} |
重復(fù)n次或更多次 |
{m,n} |
重復(fù)n到m次 |
字符類
代碼 | 說明 |
---|---|
[aeiou] |
匹配任何一個(gè)英文元音字母 |
[0-9] |
匹配一位數(shù)字 |
[a-z0-9A-Z_] |
匹配一個(gè)大小寫字母或數(shù)字 |
分支條件
|
表示或
例如:0\d{2}-\d{8}|0\d{3}-\d{7}
能匹配兩種電話號(hào)碼
需要注意順序护赊,左側(cè)匹配命中后就不會(huì)再繼續(xù)向右進(jìn)行
分組
()
表示分組
(\d{1,3}\.){3}\d{1,3}
是一個(gè)簡單的IP地址匹配表達(dá)式
反義
元字符的反義和具體字符的反義
代碼 | 說明 |
---|---|
\W |
匹配任意不是字母,數(shù)字砾跃,下劃線骏啰,漢字的字符 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非數(shù)字的字符 |
\B |
匹配不是單詞開頭或結(jié)束的位置 |
[^x] |
匹配除了x以外的任意字符 |
[^aeiou] |
匹配除了aeiou這幾個(gè)字母以外的任意字符 |
后向引用(變量)
\b(\w+)\b\s+\1\b
可以用來匹配重復(fù)的單詞,像go go, 或者kitty kitty
組名:使用<xxx>
可以給分組命名 \b(?<Word>\w+)\b\s+\k<Word>\b
分組常用的語法
代碼 | 說明 |
---|---|
(exp) |
匹配exp,并捕獲文本到自動(dòng)命名的組里 |
(?<name>exp) |
匹配exp,并捕獲文本到名稱為name的組里抽高,也可以寫成(?'name'exp)
|
(?:exp) |
匹配exp,不捕獲匹配的文本判耕,也不給此分組分配組號(hào) |
零寬斷言
零寬度正預(yù)測先行斷言
簡單說
(?=exp)
位置匹配:表達(dá)式自身位置后面能匹配exp
它斷言自身出現(xiàn)的位置的后面能匹配表達(dá)式exp
舉個(gè)栗子
比如\b\w+(?=ing\b)
,匹配以ing結(jié)尾的單詞的前面部分(除了ing以外的部分)厨内,如查找I'm singing while you're dancing.時(shí)祈秕,它會(huì)匹配sing和danc渺贤。
零寬度正回顧后發(fā)斷言
簡單說
(?<=exp)
位置匹配:表達(dá)式自身出現(xiàn)的位置前面能匹配exp
它斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式exp
舉個(gè)栗子
比如(?<=\bre)\w+\b會(huì)匹配以re開頭的單詞的后半部分(除了re以外的部分),例如在查找reading a book時(shí)请毛,它匹配ading志鞍。
負(fù)向零寬斷言
零寬度負(fù)預(yù)測先行斷言
簡單說
(?!exp)
位置匹配:表達(dá)式自身位置后面不能匹配exp
它斷言此位置的后面不能匹配表達(dá)式exp
舉個(gè)栗子
\d{3}(?!\d)
匹配三位數(shù)字,而且這三位數(shù)字的后面不能是數(shù)字方仿;\b((?!abc)\w)+\b
匹配不包含連續(xù)字符串a(chǎn)bc的單詞固棚。
零寬度負(fù)回顧后發(fā)斷言
簡單說
(?<!exp)
位置匹配:表達(dá)式自身位置前面不能匹配exp
它斷言此位置的前面不能匹配表達(dá)式exp
舉個(gè)栗子
(?<![a-z])\d{7}
匹配前面不是小寫字母的七位數(shù)字。
零寬斷言總結(jié)
代碼 | 說明 |
---|---|
(?=exp) |
匹配exp前面的位置 |
(?<=exp) |
匹配exp后面的位置 |
(?!exp) |
匹配后面跟的不是exp的位置 |
(?<!exp) |
匹配前面不是exp的位置 |
注釋
小括號(hào)的另一種用途是通過語法(?#comment)
來包含注釋仙蚜。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)
此洲。
貪婪與懶惰
貪婪匹配:
a.*b
aabab => aabab
懶惰匹配:
a.*?b
aabab => aab / ab
所有表示數(shù)量的元字符后加問號(hào)都可以起到這種效果
處理選項(xiàng)
可以配置,忽略大小寫委粉,多行模式呜师,單行模式,忽略空白贾节,顯示捕獲等
遞歸匹配
可以像詞法分析一樣使用堆棧汁汗,比較復(fù)雜??
參考鏈接:正則表達(dá)式30分鐘入門