正則表達式(RegExp Expression)(一)

今天剛好要用到正則表達式掰担,然而太久沒用,相關(guān)知識點有點模糊了谒出,重新簡單地復習一下,并分享一下。

首先:什么是正則表達式笤喳?

教程上是這樣說的:

正則表達式(Regular Expression)是一種文本模式为居,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符")杀狡。它使用單個字符串來描述蒙畴、匹配一系列匹配某個句法規(guī)則的字符串。

概念上對正則表達式的描述:

  • 它的組成是由普通字符(例如呜象,a 到 z 之間的字母)和特殊字符(稱為"元字符")膳凝;
  • 它是一種文本模式
  • 它使用單個字符串來描述恭陡、匹配一系列匹配某個句法規(guī)則的字符串蹬音。
為什么使用正則表達式?

典型的搜索和替換操作要求您提供與預期的搜索結(jié)果匹配的確切文本子姜。雖然這種技術(shù)對于對靜態(tài)文本執(zhí)行簡單搜索和替換任務可能已經(jīng)足夠了祟绊,但它缺乏靈活性,若采用這種方法搜索動態(tài)文本哥捕,即使不是不可能牧抽,至少也會變得很困難。
通過使用正則表達式遥赚,可以:

  • 測試字符串內(nèi)的模式扬舒。
    例如,可以測試輸入字符串凫佛,以查看字符串內(nèi)是否出現(xiàn)電話號碼模式或信用卡號碼模式讲坎。這稱為數(shù)據(jù)驗證。
  • 替換文本愧薛。
    可以使用正則表達式來識別文檔中的特定文本晨炕,完全刪除該文本或者用其他文本替換它。
  • 基于模式匹配從字符串中提取子字符串毫炉。
    可以查找文檔內(nèi)或輸入域內(nèi)特定的文本瓮栗。
    例如,您可能需要搜索整個網(wǎng)站瞄勾,刪除過時的材料费奸,以及替換某些 HTML 格式標記。在這種情況下进陡,可以使用正則表達式來確定在每個文件中是否出現(xiàn)該材料或該 HTML 格式標記愿阐。此過程將受影響的文件列表縮小到包含需要刪除或更改的材料的那些文件。然后可以使用正則表達式來刪除過時的材料趾疚。最后缨历,可以使用正則表達式來搜索和替換標記以蕴。

以上列表中的三點,告訴了我們正則表達式可以干什么辛孵,那接下來就是它的語法了舒裤,然后是怎么用。

正則表達式的語法

理解分點匯總:

  • 構(gòu)造正則表達式的方法和創(chuàng)建數(shù)學表達式的方法一樣觉吭。也就是用多種元字符與運算符可以將小的表達式結(jié)合在一起來創(chuàng)建更大的表達式腾供。正則表達式的組件可以是單個的字符、字符集合鲜滩、字符范圍伴鳖、字符間的選擇或者所有這些組件的任意組合。
  • 正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為"元字符")組成的文字模式徙硅。
  • 普通字符:包括沒有顯式指定為元字符的所有可打印和不可打印字符榜聂。這包括所有大寫和小寫字母、所有數(shù)字嗓蘑、所有標點符號和一些其他符號须肆。
    不可打印字符:
    不可打印字符
  • 特殊字符:也就是一些有特殊含義的字符。
    如下圖:
    特殊字符
    Tips: 許多元字符要求在試圖匹配它們時特別對待桩皿。若要匹配這些特殊字符豌汇,必須首先使字符"轉(zhuǎn)義",即泄隔,將反斜杠字符 \放在它們前面拒贱。
  • 限定符:用來指定正則表達式的一個給定組件必須要出現(xiàn)多少次才能滿足匹配。有或+或?或{n}或{n,}或{n,m}共6種佛嬉。*
    如下圖:
    限定符
  • 定位符:使您能夠?qū)⒄齽t表達式固定到行首或行尾逻澳。它們還使您能夠創(chuàng)建這樣的正則表達式,這些正則表達式出現(xiàn)在一個單詞內(nèi)暖呕、在一個單詞的開頭或者一個單詞的結(jié)尾斜做。它用來描述字符串或單詞的邊界,^和$分別指字符串的開始與結(jié)束湾揽,\b描述單詞的前或后邊界瓤逼,\B表示非單詞邊界。
    如圖:
    定位符
  • 選擇:用圓括號將所有選擇項括起來钝腺,相鄰的選擇項之間用|分隔抛姑。但用圓括號會有一個副作用赞厕,是相關(guān)的匹配會被緩存艳狐,此時可用?:放在第一個選項前來消除這種副作用。
    其中?:是非捕獲元之一皿桑,還有兩個非捕獲元是?=和?!毫目,這兩個還有更多的含義蔬啡,前者為正向預查,在任何開始匹配圓括號內(nèi)的正則表達式模式的位置來匹配搜索字符串镀虐,后者為負向預查箱蟆,在任何開始不匹配該正則表達式模式的位置來匹配搜索字符串。
  • 反向應用:對一個正則表達式模式或部分模式兩邊添加圓括號將導致相關(guān)匹配存儲到一個臨時緩沖區(qū)中刮便,所捕獲的每個子匹配都按照在正則表達式模式中從左到右出現(xiàn)的順序存儲空猜。緩沖區(qū)編號從 1 開始,最多可存儲 99 個捕獲的子表達式恨旱。每個緩沖區(qū)都可以使用 '\n' 訪問辈毯,其中 n 為一個標識特定緩沖區(qū)的一位或兩位十進制數(shù)
元字符


元字符匯總
運算符優(yōu)先級

正則表達式從左到右進行計算,并遵循優(yōu)先級順序搜贤,這與算術(shù)表達式非常類似谆沃。
相同優(yōu)先級的從左到右進行運算,不同優(yōu)先級的運算先高后低仪芒。下表從最高到最低說明了各種正則表達式運算符的優(yōu)先級順序:

運算符的優(yōu)先級
匹配規(guī)則
  • 基本模式匹配
    一切從最基本的開始唁影。模式,是正規(guī)表達式最基本的元素掂名,它們是一組描述字符串特征的字符据沈。
  • 字符簇
    在INTERNET的程序中,正規(guī)表達式通常用來驗證用戶的輸入饺蔑。當用戶提交一個FORM以后卓舵,要判斷輸入的電話號碼、地址膀钠、EMAIL地址掏湾、信用卡號碼等是否有效,用普通的基于字面的字符是不夠的肿嘲。
    所以要用一種更自由的描述我們要的模式的辦法融击,它就是字符簇。要建立一個表示所有元音字符的字符簇雳窟,就把所有的元音字符放在一個方括號里
  • 確定重復出現(xiàn)
    如果要匹配一個單詞或一組數(shù)字尊浪。一個單詞有若干個字母組成,一組數(shù)字有若干個單數(shù)組成封救。跟在字符或字符簇后面的花括號({})用來確定前面的內(nèi)容的重復出現(xiàn)的次數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拇涤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子誉结,更是在濱河造成了極大的恐慌鹅士,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惩坑,死亡現(xiàn)場離奇詭異掉盅,居然都是意外死亡也拜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門趾痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慢哈,“玉大人,你說我怎么就攤上這事永票÷鸭” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵侣集,是天一觀的道長艰赞。 經(jīng)常有香客問我,道長肚吏,這世上最難降的妖魔是什么方妖? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮罚攀,結(jié)果婚禮上党觅,老公的妹妹穿的比我還像新娘。我一直安慰自己斋泄,他們只是感情好杯瞻,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炫掐,像睡著了一般魁莉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上募胃,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天旗唁,我揣著相機與錄音,去河邊找鬼痹束。 笑死检疫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的祷嘶。 我是一名探鬼主播屎媳,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼论巍!你這毒婦竟也來了烛谊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤嘉汰,失蹤者是張志新(化名)和其女友劉穎丹禀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡湃崩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了接箫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攒读。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辛友,靈堂內(nèi)的尸體忽然破棺而出薄扁,到底是詐尸還是另有隱情,我是刑警寧澤废累,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布邓梅,位于F島的核電站,受9級特大地震影響邑滨,放射性物質(zhì)發(fā)生泄漏日缨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一掖看、第九天 我趴在偏房一處隱蔽的房頂上張望匣距。 院中可真熱鬧,春花似錦哎壳、人聲如沸毅待。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尸红。三九已至,卻和暖如春刹泄,著一層夾襖步出監(jiān)牢的瞬間外里,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工特石, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留级乐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓县匠,卻偏偏與公主長得像风科,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乞旦,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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

  • 正則表達式到底是什么東西贼穆?字符是計算機軟件處理文字時最基本的單位,可能是字母兰粉,數(shù)字故痊,標點符號,空格玖姑,換行符愕秫,漢字等...
    獅子挽歌閱讀 2,147評論 0 9
  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,493評論 9 151
  • 注:本篇文章只為方便查看慨菱,特此保留,如有冒犯戴甩,敬請諒解7取!甜孤! 本文目標 30分鐘內(nèi)讓你明白正則表達式是什么协饲,并對它...
    阿杰Alex閱讀 1,483評論 0 10
  • 本文譯自 制作正則引擎的作者 Jan Goyvaerts 為工具 RegexBuddy 寫的教程版權(quán)歸原作者所有注...
    極客圈閱讀 3,286評論 0 25
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...