正則表達式入門

所有加粗的元字符的雙引號均為了方便表示,所有的正則表達式均在 ‘’ ——單引號中

“/b”:元字符破婆,代表單詞的開始或者結(jié)尾,即單詞的分界胸囱,用于明確匹配

例如祷舀,我們匹配 ?‘jy’:‘\bjy\b’就可以精確匹配,hello,jy烹笔,ps:標點符號的連接不影響匹配結(jié)果

“.”:元字符裳扯,匹配除換行符以外的所有字符

“*”:元字符,代表“*”前面位置的內(nèi)容可以使用任意次谤职,包括零次饰豺,如‘.*’,任意數(shù)量不包含換行符的字符

“+”:元字符允蜈,代表“+”前面位置的內(nèi)容可以使用任意次冤吨,不包括零次,如‘.*’陷寝,任意數(shù)量不包含換行符的字符

“锅很?”:元字符,匹配0次或者一次

“{n}”:匹配n次

“{n,}”:匹配n次或者更多

“{m,n}”:匹配m-n次凤跑,‘029-\d{2,5}-\d{3,}’爆安,匹配029-開頭的,接2-5個數(shù)字仔引,接‘-’扔仓,接3個以上數(shù)字

“\d”:元字符褐奥,代表匹配數(shù)字,如翘簇,‘\d\d-\d\d\d’撬码,代表2個數(shù)字接一個‘-’,接3個數(shù)字版保,為方便起見呜笑,可以這樣寫,‘\d{2}-\d{3}’

“\s”:匹配任意的空白符彻犁,包括空格叫胁,制表符(Tab),換行符汞幢,中文全角空格等

“\w”:匹配字母或數(shù)字或下劃線或漢字等

“^”:匹配你要用來查找的字符串的開頭驼鹅,‘^\w+’匹配一行的第一個單詞(或整個字符串的第一個單詞,具體匹配哪個意思得看選項設(shè)置)

“$”:匹配結(jié)尾森篷,例如 ‘^\d{4,9}$’输钩,匹配5-9個數(shù)字,

這是匹配在整個對象中進行仲智,如果模式為按行匹配买乃,那么它們代表行起始和結(jié)束

對元字符的匹配,需要 ‘\’ 來實現(xiàn)坎藐,譬如为牍,‘\.’ 匹配 ‘.’,‘\*’匹配 ‘*’ 岩馍,‘\\’匹配 ‘\’, ‘C:\\Windows’匹配 ‘C:\Windows’

匹配自定義字符集碉咆,[ ]:例如只需要匹配 a,b,c,d,e,可以這樣寫[abcde]蛀恩;[0-9]疫铜,匹配數(shù)字;[a-z]匹配小寫字母双谆;[A-Z]匹配大寫字母壳咕;[a-z0-9A-Z]匹配任意數(shù)組或者字母

c中,識別標識符的正則表達式:‘\b[a-zA-Z]+[a-zA-Z0-9_]*\b’

分支條件:正則表達式使用 ‘|’ 表示分支條件

‘0\d{2}-\d{8}|0\d{3}-\d{7}’ 這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區(qū)號顽馋,8位本地號(如010-12345678)谓厘,一種是4位區(qū)號,7位本地號(0376-2233445)

‘\(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}’ 這個表達式匹配3位區(qū)號的電話號碼寸谜,其中區(qū)號可以用小括號括起來竟稳,也可以不用,區(qū)號與本地號間可以用連字號或空格間隔,也可以沒有間隔他爸,存在問題:(029-12345678

分組:正則表達式使用小括號來表示子表達式聂宾,也叫做分組,用于重復匹配多個字符诊笤,例如系谐,‘(\d{1,3}\.){3}\d{1,3}’ 用于匹配類似 ipv4格式的串。

這里給一個正確的ip匹配格式:‘((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)’讨跟, ‘2[0-4]\d|25[0-5]|[01]?\d\d?’ 匹配200-249或者250-255或者0-199纪他,至此整個結(jié)構(gòu)就簡單了

正則表達式為每一個分組分配一個組號,1代表第一個分組晾匠,0代表整個表達式止喷,其規(guī)則是按照左括號來進行匹配,而且實際分配過程從左至右掃描兩遍混聊,第一遍為未命名分組編號,第二遍為命名分組編號乾巧,故而命名分組的標號都大于未命名分組句喜。

反義:查找不屬于某個能簡單定義的字符類的字符


例:‘\S+’? 匹配不包含空白符的字符串,‘<a[^>]+>’ 匹配用尖括號括起來的以a開頭的字符串

向后引用:用于重復搜索前面某個分組匹配的文本

‘\b(\w+)\b\s+\1\b’ 可以用來匹配重復的單詞沟于,像go go, 或者kitty kitty咳胃,\1代表分組(第一個分組)之前捕獲的單詞,直接拿來用了旷太;自己命名分組展懈,‘\b(?<word>\w+)\b\s+\k<word>\b’ ,\k代表反向引用

小括號還有許多其他用法:

零寬斷言(?=exp)供璧,零寬度正預測先行斷言存崖,它斷言自身出現(xiàn)的位置的后面的匹配表達式exp,例如'\b\w+(?=ing\b)'睡毒,匹配以ing結(jié)尾的單詞来惧,不包括img本身,I'm going to stay with you. 匹配到‘go’演顾;(?=<exp)供搀,零寬度正回顧后發(fā)斷言,它斷言自身出現(xiàn)的位置的前面的匹配表達式exp钠至,例如‘(\bre)\w+\b’葛虐,匹配以re開頭的單詞的后半部分,rectify棉钧,匹配到ctify屿脐。

‘(?<=\s)\d+(?=\s)’ 匹配以空白符間隔的數(shù)字

負向零寬斷言:確保某個字符沒有出現(xiàn),但并不想去匹配它,只匹配一個字符摄悯,不消費其他字符

零寬度負預測先行斷言(?!exp):斷言此位置的后面不能匹配表達式exp

'\b\w*q(?!u)\w*\b'赞季,匹配包含后面不是字母u的字母q的單詞;'\d{3}(?!\d)'匹配三位數(shù)字奢驯,而且這三位數(shù)字的后面不能是數(shù)字申钩;'\b((?!abc)\w)+\b'匹配不包含連續(xù)字符串a(chǎn)bc的單詞

零寬度負回顧后發(fā)斷言(?<!exp):斷言此位置的前面不能匹配表達式exp

(?<![a-z])\d{7}:匹配前面不是小寫字母的七位數(shù)字

(?<=<(\w+)>).*(?=<\/\1>):比配html標簽<exp>*</exp>

注釋:(?#comment) 此代表注釋,被正則表達式忽略瘪阁,譬如2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)

貪婪匹配與懶惰匹配:正則表達式默認為貪婪匹配撒遣,即匹配盡可能長的串,如'a\w+b'管跺,匹配'ababba'時匹配到'ababb'义黎,若要使用懶惰匹配,如下:


遞歸匹配:為了匹配成對的符號豁跑,如()廉涕,[],""之類的艇拍,使用堆棧來完成:

(?'group')把捕獲的內(nèi)容命名為group,并壓入堆棧(Stack)狐蜕;

(?'-group')從堆棧上彈出最后壓入堆棧的名為group的捕獲內(nèi)容,如果堆棧本來為空卸夕,則本分組的匹配失敳闶汀;

(?(group)yes|no)如果堆棧上存在以名為group的捕獲內(nèi)容的話快集,繼續(xù)匹配yes部分的表達式贡羔,否則繼續(xù)匹配no部分;

(?!)零寬負向先行斷言个初,由于沒有后綴表達式乖寒,試圖匹配總是失敗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勃黍,一起剝皮案震驚了整個濱河市宵统,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌覆获,老刑警劉巖马澈,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弄息,居然都是意外死亡痊班,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門摹量,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涤伐,“玉大人馒胆,你說我怎么就攤上這事∧” “怎么了祝迂?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長器净。 經(jīng)常有香客問我型雳,道長,這世上最難降的妖魔是什么山害? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任纠俭,我火速辦了婚禮,結(jié)果婚禮上浪慌,老公的妹妹穿的比我還像新娘冤荆。我一直安慰自己,他們只是感情好权纤,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布钓简。 她就那樣靜靜地躺著,像睡著了一般汹想。 火紅的嫁衣襯著肌膚如雪涌庭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天欧宜,我揣著相機與錄音,去河邊找鬼拴魄。 笑死冗茸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的匹中。 我是一名探鬼主播夏漱,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顶捷!你這毒婦竟也來了挂绰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤服赎,失蹤者是張志新(化名)和其女友劉穎葵蒂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體重虑,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡践付,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缺厉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片永高。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡隧土,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出命爬,到底是詐尸還是另有隱情曹傀,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布饲宛,位于F島的核電站皆愉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏落萎。R本人自食惡果不足惜亥啦,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望练链。 院中可真熱鬧翔脱,春花似錦、人聲如沸媒鼓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绿鸣。三九已至疚沐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潮模,已是汗流浹背亮蛔。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擎厢,地道東北人究流。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像动遭,于是被迫代替她去往敵國和親芬探。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 正則表達式到底是什么東西厘惦?字符是計算機軟件處理文字時最基本的單位偷仿,可能是字母,數(shù)字宵蕉,標點符號酝静,空格,換行符羡玛,漢字等...
    獅子挽歌閱讀 2,147評論 0 9
  • 注:本篇文章只為方便查看形入,特此保留,如有冒犯缝左,敬請諒解R谒臁Eㄈ簟! 本文目標 30分鐘內(nèi)讓你明白正則表達式是什么蛇数,并對它...
    阿杰Alex閱讀 1,483評論 0 10
  • 前言 倆件事促使我寫這篇文章挪钓。一則之前面試面試到了正則,發(fā)現(xiàn)不甚熟悉耳舅。二則這些天看jQuery源碼碌上,一些正則看的有...
    nymlc閱讀 355評論 1 1
  • 最簡單的單獨匹配一個單詞,如匹配blue.需要使用\b.它是元字符浦徊,代表著單詞的開頭或者結(jié)尾.只匹配一個位置.如匹...
    BlueBeginner閱讀 439評論 0 2
  • 什么是正則表達式呢馏予? 正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一...
    chenxiaoer閱讀 409評論 0 1