正則表達(dá)式基礎(chǔ)到高階(語法)
元字符
| 元字符 |
說明 |
. |
匹配除換行符以外的任意字符 |
\w |
匹配字母或數(shù)字或下劃線或漢字 |
\s |
匹配任意的空白符 |
\d |
匹配數(shù)字 |
\b |
匹配單詞的開始或結(jié)束 |
^ |
匹配字符串的開始 |
$ |
匹配字符串的結(jié)束 |
反義
| 語法 |
說明 |
\W |
匹配任意不是字母,數(shù)字,下劃線,漢字的字符 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非數(shù)字的字符 |
\B |
匹配不是單詞開頭或結(jié)束的位置 |
[^x] |
匹配除了x以外的任意字符 |
[^aeiou] |
匹配除了aeiou這幾個(gè)字母以外的任意字符 |
重復(fù)模式
| 語法 |
說明 |
* |
重復(fù)零次或更多次 |
+ |
重復(fù)一次或更多次 |
? |
重復(fù)零次或一次 |
{n} |
重復(fù)n次 |
{n,} |
重復(fù)n次或更多次 |
{n,m} |
重復(fù)n到m次 |
貪婪與懶惰
| 語法 |
說明 |
*? |
重復(fù)任意次,但盡可能少重復(fù) |
+? |
重復(fù)1次或更多次,但盡可能少重復(fù) |
?? |
重復(fù)0次或1次,但盡可能少重復(fù) |
{n,m}? |
復(fù)n到m次,但盡可能少重復(fù) |
{n,}? |
重復(fù)n次以上,但盡可能少重復(fù) |
分組
| 語法 |
說明 |
(exp) |
分組 |
(?<groupname>exp) |
分組命名 |
(?:exp) |
匹配exp,不捕獲匹配的文本,也不給此分組分配組號(hào) |
后向引用
要匹配 taobao taobao , home home 這樣的情況如果處理?
\b(\w+)\b\s+\1\b 中 \1表示引用分組1 (\w+)
\b(?<Word>\w+)\b\s+\k<Word>\b 中 k<Word>表示引用分組名Word (?<Word>\w+)
零寬斷言
| 語法 |
說明 |
?=exp |
零寬度正預(yù)測先行斷言,自身出現(xiàn)的位置的后面能匹配表達(dá)式exp |
?<=exp |
零寬度正回顧后發(fā)斷言,自身出現(xiàn)的位置的前面能匹配表達(dá)式exp |
負(fù)向零寬斷言
| 語法 |
說明 |
?!exp |
零寬度負(fù)預(yù)測先行斷言,自身出現(xiàn)的位置的后面不能匹配表達(dá)式exp |
?<!exp |
零寬度負(fù)回顧后發(fā)斷言,自身出現(xiàn)的位置的前面不能匹配表達(dá)式exp |
平衡組/遞歸匹配
目前C#提供了支持
(?'group') 把捕獲的內(nèi)容命名為group,并壓入堆棧(Stack)
(?'-group') 從堆棧上彈出最后壓入堆棧的名為group的捕獲內(nèi)容,如果堆棧本來為空,則本分組的匹配失敗
(?(group)yes|no) 如果堆棧上存在以名為group的捕獲內(nèi)容的話,繼續(xù)匹配yes部分的表達(dá)式,否則繼續(xù)匹配no部分
(?!) 零寬負(fù)向先行斷言,由于沒有后綴表達(dá)式,試圖匹配總是失敗
#如何把xx <aa <bbb> <bbb> aa> yy這樣的字符串里,最長的配對(duì)的尖括號(hào)內(nèi)的內(nèi)容捕獲出來?
< #最外層的左括號(hào)
[^<>]* #最外層的左括號(hào)后面的不是括號(hào)的內(nèi)容
(
(
(?'Open'<) #碰到了左括號(hào),在黑板上寫一個(gè)"Open"
|
(?'-Open'>) #碰到了右括號(hào),擦掉一個(gè)"Open"
| #匹配右括號(hào)后面不是括號(hào)的內(nèi)容
[^<>]*
)+
)*
(?(Open)(?!)) #在遇到最外層的右括號(hào)前面,判斷黑板上還有沒有沒擦掉的"Open";如果還有,則匹配失敗
> #最外層的右括號(hào)
處理選項(xiàng)(RegexOptions)
| 語法 |
說明 |
| IgnoreCase |
匹配時(shí)不區(qū)分大小寫 |
| Multiline |
更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個(gè)字符串的開頭和結(jié)尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結(jié)束前的位置.) |
| Singleline |
更改.的含義,使它與每一個(gè)字符匹配(包括換行符\n) |
| IgnorePatternWhitespace |
忽略表達(dá)式中的非轉(zhuǎn)義空白并啟用由#標(biāo)記的注釋 |
| ExplicitCapture |
僅捕獲已被顯式命名的組 |
整理自Parry Qiu的正則表達(dá)式視頻教程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。