10.正則表達(dá)式(一)

目錄:
1.概述
2.元字符
3.次數(shù)匹配
4.單行與多行模式

1.概述

概述:

正則表達(dá)式故硅,Regular Expression蛉谜,縮寫(xiě)為regex、regexp、RE等,正則表達(dá)式是文本處理極為重要的技術(shù)边翼,用它可以對(duì)字符串按照某種規(guī)則及逆行檢索、
替換紊婉。1970年代米者,Unix之父Ken Thompson將正則表達(dá)式引入到Unix中文本編輯器ed和grep命令中,由此正則表達(dá)式普及開(kāi)來(lái)畜晰。1980年后砾莱,perl語(yǔ)言
對(duì)Henry Spencer編寫(xiě)的庫(kù),擴(kuò)展了很多新的特性凄鼻。1997年開(kāi)始腊瑟,Philip Hazel開(kāi)發(fā)了PCRE(Perl Compatible Regular Expression),它被PHP和
HTTPD等工具采用块蚌。正則表達(dá)式應(yīng)用極其廣泛闰非,shell中處理文本的命令,各級(jí)高級(jí)編程語(yǔ)言都支持正則表達(dá)式峭范。

分類(lèi):

1.BRE
    基本正則表達(dá)式财松、grep、sed纱控、vi等軟件支持游岳。vim有擴(kuò)展
2.ERE
    擴(kuò)展正則表達(dá)式,egrep (grep -E)其徙、sed -r等
3.PCRE
    幾乎所有高級(jí)語(yǔ)言都是PCRE的方言或者變種胚迫。Python從1.6開(kāi)始使用SRE正則表達(dá)式引擎、可以認(rèn)為是PCRE的子集唾那,見(jiàn)模塊re访锻。

2.元字符

2.1 元字符 metacharacter
代碼                  說(shuō)明                                                              舉例
.          匹配除換行符外任意一個(gè)字符                        
[abc]      字符集合褪尝,只能表示一個(gè)字符位置。匹配所包含的任意一個(gè)字符期犬。                    [abc]匹配plain中的'a'
[^abc]     字符集合河哑,只能表示一個(gè)字符位置。匹配除去集合內(nèi)字符的任意一個(gè)字符        [^abc]可以匹配plain中'p','l','i'或者'n'
[a-z]      字符范圍龟虎,也是個(gè)集合璃谨,表示一個(gè)字符位置匹配所包含的任意一個(gè)字符                常用[A-Z] [0-9]
\b         匹配單詞的邊界                                                       \bb在文本中找到單詞中b開(kāi)頭的b字符
\B         不匹配單詞的邊界                                                t\B包含t的單詞但是不以t結(jié)尾的t字符,例如write
                                                                          \Bb不以b開(kāi)頭的含有b的單詞鲤妥,例如able
\d         [0-9]匹配1位數(shù)字                                                             \d
\D         [^0-9]匹配1位非數(shù)字
\s         匹配1位空白字符佳吞,包括換行符、制表符棉安、空格[\f\r\n\t\v]
\S         匹配1位非空白字符
\w         匹配[a-zA-Z0-9_]底扳,包括中文的字                                                 \w
\W         匹配\w之外的字符
2.2 轉(zhuǎn)義
凡是在正則表達(dá)式中有特殊意義的符號(hào),如果想使用它的本意贡耽,請(qǐng)使用\轉(zhuǎn)義衷模。反斜杠自身,得使用\\
\r \n還是轉(zhuǎn)義后代表回車(chē)蒲赂,換行

3.次數(shù)匹配

3.1 次數(shù)匹配
代碼                  說(shuō)明                                          舉例
*          表示前面的正則表達(dá)式會(huì)重復(fù)0次或多次            e\w*單詞中e后面可以有非空白字符                        
+          表示前面的正則表達(dá)式重復(fù)至少1次                e\w+單詞中e后面至少有一個(gè)非空白字符
?          表示前面的正則表達(dá)式會(huì)重復(fù)0次或1次             e\w?單詞中e后面至多有一個(gè)非空白字符
{n}        重復(fù)固定的n次                                e\w{?}單詞中e后面只能有一個(gè)非空白字符
{n,}       重復(fù)至少n次                                  e\w{1,}等價(jià)e\w+阱冶,e\w{0,}等價(jià)e\w*,e\w{0,1}等價(jià)e\w?
{n,m}      重復(fù)n到m次                                   e\w{1,10}單詞中e后面至少1個(gè)滥嘴,至多10個(gè)非空白字符
x|y        匹配x或者y                                   wood took foot food使用w|food或者(w|f)ood
3.2 捕獲
代碼                          說(shuō)明                                                    舉例
(pattern)       使用小括號(hào)指定一個(gè)子表達(dá)式木蹬,也叫分組,
                捕獲后會(huì)自動(dòng)分配組號(hào)從1開(kāi)始氏涩,可以改變優(yōu)先級(jí)                                
\數(shù)字           匹配對(duì)應(yīng)的分組                                         (very) \1 匹配very very届囚,但捕獲的組group是very
(?:pattern)     如果僅僅為了改變優(yōu)先級(jí),就不需要捕獲分組                 (?:w|f)ood是尖,'industr(?:y|ies)等價(jià)'意系,'industry|industries'
(?<name>exp)    分組捕獲,但是可以通過(guò)name訪(fǎng)問(wèn)分組Python語(yǔ)法必須是(?P<name>exp)
(?'name'exp)
3.3 零寬斷言
wood  took  foot  food
代碼                          說(shuō)明                                                  舉例
(?=exp)      零寬度正預(yù)測(cè)先行斷言饺汹,斷言exp一定在匹配的右邊出現(xiàn)蛔添,              f(?=oo) f后面一定有oo出現(xiàn)
             也就是說(shuō)斷言后面一定跟個(gè)exp

                                
(?<=exp)      零寬度正回顧后發(fā)斷言,斷言exp一定在匹配的左邊出現(xiàn)兜辞,             (?<=f)ood迎瞧、(?<=t)ook分別匹配ood、ook逸吵、ook前一定有t出現(xiàn)
              也就是說(shuō)前面一定有個(gè)exp前綴
3.4 負(fù)向零寬斷言
代碼                          說(shuō)明                                                  舉例
(?!exp)      零寬度負(fù)預(yù)測(cè)先行斷言凶硅,斷言exp一定不會(huì)出現(xiàn)在右側(cè),         \d{3}(?!\d)匹配3位數(shù)字扫皱,斷言3位數(shù)字后面一定不能是
             也就是說(shuō)斷言后面一定不是exp                             數(shù)字foo(?!d)foo后面一定不是d
(?<!exp)     零寬度負(fù)回顧后發(fā)斷言足绅,斷言exp一定不能出現(xiàn)在左側(cè)捷绑,         (?<!f)ood ood的左邊一定不是f
             也就是說(shuō)斷言前面一定不能是exp

NOTE:
1.斷言不占分組號(hào),斷言如同條件氢妈,只是要求匹配必須滿(mǎn)足斷言的條件
2.使用正則表達(dá)式時(shí)粹污,能用簡(jiǎn)單表達(dá)式,就不要復(fù)雜的表達(dá)式

3.5 貪婪與非貪婪

默認(rèn)是貪婪模式首量,也就是說(shuō)盡量多匹配更長(zhǎng)的字符串壮吩;
非貪婪實(shí)在重復(fù)的符號(hào)后面加上一個(gè)?號(hào),就盡量少匹配了加缘。

代碼                    說(shuō)明                                                
*?             匹配任意次鸭叙,但盡可能少重復(fù)
+?             匹配至少1次,但盡可能少重復(fù)
??             匹配0次或1次生百,但盡可能少重復(fù)
{n,}?          匹配至少n次递雀,但盡可能少重復(fù)
{n,m}?         匹配至少n次柄延,至多m次蚀浆,但盡可能少重復(fù)

4.單行與多行模式

4.1 單行模式
.   可以匹配所有字符,包括換行符
^   表示真?zhèn)€字符串的開(kāi)頭搜吧,$整個(gè)字符串的結(jié)尾
4.2 多行模式
.   可以匹配除了換行符之外的字符
^   表示行首市俊,$行尾
^  表示整個(gè)字符串的開(kāi)始,$表示整個(gè)字符串的結(jié)尾滤奈。
   開(kāi)始指的是\n后緊接著下一個(gè)字符摆昧,結(jié)束指的是\n前的字符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末割粮,一起剝皮案震驚了整個(gè)濱河市珊肃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凑队,老刑警劉巖昭躺,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忌锯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡领炫,警方通過(guò)查閱死者的電腦和手機(jī)偶垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)帝洪,“玉大人似舵,你說(shuō)我怎么就攤上這事〈邢浚” “怎么了砚哗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)砰奕。 經(jīng)常有香客問(wèn)我蛛芥,道長(zhǎng)泌参,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任常空,我火速辦了婚禮沽一,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漓糙。我一直安慰自己铣缠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布昆禽。 她就那樣靜靜地躺著蝗蛙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醉鳖。 梳的紋絲不亂的頭發(fā)上捡硅,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音盗棵,去河邊找鬼壮韭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纹因,可吹牛的內(nèi)容都是我干的喷屋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瞭恰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屯曹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起惊畏,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恶耽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后颜启,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體偷俭,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年农曲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了社搅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乳规,死狀恐怖形葬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暮的,我是刑警寧澤笙以,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冻辩,受9級(jí)特大地震影響猖腕,放射性物質(zhì)發(fā)生泄漏拆祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一倘感、第九天 我趴在偏房一處隱蔽的房頂上張望放坏。 院中可真熱鬧,春花似錦老玛、人聲如沸淤年。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)麸粮。三九已至,卻和暖如春镜廉,著一層夾襖步出監(jiān)牢的瞬間弄诲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工娇唯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留齐遵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓视乐,卻偏偏與公主長(zhǎng)得像洛搀,于是被迫代替她去往敵國(guó)和親敢茁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子佑淀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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