常用元字符
代碼 | 說明 |
---|---|
. | 匹配除了換行符以為的任意字符 |
\w | 匹配字母或數(shù)字或下劃線或漢字 |
\s | 匹配任意的空白符 |
\d | 匹配數(shù)字 |
\b | 匹配單詞開始或者結(jié)束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結(jié)束 |
單詞:不少于一個(gè)的連續(xù)\w
元字符^
和$
都匹配一個(gè)位子,這和\b有點(diǎn)類似痊末。 ^
匹配索要查找的字符串開頭,$
匹配結(jié)尾豁辉。
字符轉(zhuǎn)義
如果想要查找字符本身得使用\
來取消這些字符的特殊意義。
.
->\.
重復(fù)
常用限定符:
代碼/語法 | 說明(重復(fù)x次) |
---|---|
* | x≥0 |
+ | x≥1 |
? | x=0或1 |
{n} | x=n |
{n,} | x≥n |
{n,m} | n≤x≤m |
字符類
匹配沒有預(yù)定義字符的字符集合
- (a, e, i, o, u)
--> [a, e, i, o, u]就匹配任何一個(gè)英文原因字母- [0-9] === \d
- [a-z0-9A-Z_] === \w
分枝條件
具體條件用|
分隔開
分組
重復(fù)多個(gè)單字符直接在后面加上限定符就行了贮勃,但是如果想要重復(fù)多個(gè)單字符-->使用小括號(hào)(分組)
反義
常用反義代碼
代碼/語法 | 說明 |
---|---|
\W | 匹配任意不是字母童擎、數(shù)字滴劲、下劃線、漢字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非數(shù)字的字符 |
\B | 匹配不是單詞開頭或者結(jié)束的位置 |
[^ x] | 匹配除了x意外的任意字符 |
[^ aeiou] | 匹配除了aeiou幾個(gè)字母以外的任意字符 |
## ****后向引用
使用小括號(hào)指定一個(gè)表達(dá)式顾复,匹配這個(gè)子表達(dá)式的文本可以在其他程序中作進(jìn)一步的處理班挖。默認(rèn)情況下會(huì)自動(dòng)擁有一個(gè)組號(hào),規(guī)則是:從左向右芯砸。
- 分組0對(duì)應(yīng)整個(gè)正則表達(dá)式
- 實(shí)際上組號(hào)分配過程是要從左向右掃描兩遍的:第一遍只給未命名組分配萧芙,第二遍只給命名組分配给梅,因此所有命名組的組號(hào)都大于未命名的組號(hào)
- 可以使用(?:exp)這樣的語法來剝奪一個(gè)分組對(duì)組號(hào)分配的參與權(quán)
常用分組語法:
分類 | 代碼/語法 | 說明 |
---|---|---|
捕獲 | (exp) | 匹配exp,并捕獲文本到自動(dòng)命名的組里 |
(?<name>exp) | 匹配exp双揪,并捕獲文本到名稱為name的組里动羽,也可以寫成(?'name'exp) | |
(?:exp) | 匹配exp,不捕獲匹配的文本渔期,也不給此分組編號(hào) | |
零寬斷言 | (?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 | |
(?!exp) | 匹配后面跟的不是exp的位置 | |
(?<!exp) | 匹配前面不是exp的位置 | |
注釋 | (?#comment) | 這種類型的分組不對(duì)正則表達(dá)式的處理產(chǎn)生任何影響运吓,用于提供注釋讓人閱讀 |
零寬斷言
斷言用來聲明一個(gè)應(yīng)該為真得事實(shí)。正則表達(dá)式中只有當(dāng)斷言為真時(shí)才會(huì)繼續(xù)匹配擎场。
- (?=exp)也叫零寬度正預(yù)測(cè)先行斷言羽德,它斷言自身出現(xiàn)的位置的后面能匹配exp。
- (?<=exp)也叫零寬度正回顧后發(fā)斷言迅办,它斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式exp。
負(fù)向零寬斷言**
可以用來確保某個(gè)字符沒有出現(xiàn)章蚣,并且不想去匹配它
注釋
小括號(hào)的另一種用途是通過語法(?#comment)來包含注釋站欺。
例如:
[0-9a-zA-Z_](?#\w)
貪婪與懶惰
貪婪匹配:當(dāng)正則表達(dá)式包含能接受的限定符時(shí),通常的行為是(在使整個(gè)表達(dá)式能得到匹配的前提下)匹配盡可能多的字符纤垂。
懶惰匹配:匹配盡可能少的字符矾策。前面給定的限定符都可以被轉(zhuǎn)化為懶惰匹配模式,只要在它后面加上一個(gè)問號(hào)?
峭沦。這樣贾虽。*?就以為這匹配任意數(shù)量的重復(fù)吼鱼,但是在使整個(gè)匹配成功的前提下使用最少的重復(fù)蓬豁。
aabab:
a.*b -> aabab
a.*?b -> aab & ab
懶惰限定符
代碼/語法 | 說明 |
---|---|
*? | 重復(fù)任意次,<u>但盡可能少重復(fù)</u> |
+? | 重復(fù)1次或者更多次菇肃,<u>但盡可能少重復(fù)</u> |
?? | 重復(fù)0此或者1次地粪,<u>但盡可能少重復(fù)</u> |
{n,m} | 重復(fù)n到m次,<u>但盡可能少重復(fù)</u> |
{n,} | 重復(fù)n次以上琐谤,<u>但盡可能少重復(fù)</u> |
處理選項(xiàng)
常用的處理選項(xiàng)
名稱 | 說明 |
---|---|
IgnoreCase(忽略大小寫) | 匹配時(shí)不區(qū)分大小寫 |
Multiline(多行模式) | 更改^ 和$ 含義蟆技,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個(gè)字符串的開頭和結(jié)尾匹配斗忌。(在此模式下质礼,$ 的精確含義是:匹配\n之前的位置以及字符串結(jié)束前的位置) |
Singleline(單行模式) | 更改.的含義,使它與每一個(gè)字符匹配(包括換行符\n ) |
IgnorePatternWhitespace(忽略空白) | 忽略表達(dá)式中的非轉(zhuǎn)義空白并請(qǐng)用由#標(biāo)注的注釋 |
ExplicitCapture(顯示捕獲) | 僅捕獲已被顯示命名的組 |
多行模式和單行模式可以同時(shí)使用