正則表達(dá)式使用筆記

由于最近接手一個(gè)代碼使用正則表達(dá)式匹配location做不同環(huán)境的配置普筹,由是又雙叒叕看不懂正則汤善,第N次去看正則相關(guān)的材料橡疼,所以覺得還是應(yīng)該知其所以然庐舟,系統(tǒng)學(xué)習(xí)一下,并做下總結(jié)挪略。

圖書材料 :《學(xué)習(xí)正則表達(dá)式》

What

正則表達(dá)式是描述一組字符串特征的模式历帚,用來匹配特定的字符串。
—— Ken Thompson

Regular Expression的“Regular”一般被譯為“正則”挽牢、“正規(guī)”、“常規(guī)”禽拔。此處的“Regular”即是“規(guī)則”刘离、“規(guī)律”的意思,Regular Expression即“描述某種規(guī)則的表達(dá)式”之意硫惕。 —— 維基百科

這個(gè)網(wǎng)站很方便做正則的測試:http://www.regexpal.com/

How

下面講解一下常用的正則語法
正則表達(dá)式語言由兩種基本字符類型組成:原義(正常)文本字符和元字符野来。

原義示例: 正則表達(dá)式:hello,對(duì)hello world的匹配結(jié)果為 hello world

元字符使正則表達(dá)式具有處理能力豁辉。所謂元字符就是指那些在正則表達(dá)式中具有特殊意義的專用字符舀患,可以用來規(guī)定其前導(dǎo)字符(即位于元字符前面的字符)在目標(biāo)對(duì)象中的出現(xiàn)模式。

簡單點(diǎn):元字符不參與匹配灰追,其表示的特殊意義作為規(guī)則匹配

元字符

元字符 作用 示例 匹配結(jié)果(用超鏈接樣式做為匹配標(biāo)志)
. 匹配任意字符 . aBc.:x
\ 轉(zhuǎn)義符下一個(gè)字符標(biāo)記為
一個(gè)特殊字符
或一個(gè)原義字符
或一個(gè)后向引用
或一個(gè)八進(jìn)制
\.
其余后面分別詳細(xì)講解
aBc.:x匹配真正的.
| 或操作 [3|5] 12345
^ 行起啟錨位符
非,不匹配指定字符或字符組
^1
[^12]
1211
31245
$ 行結(jié)束錨位符 1$ 1211
? {0,1}匹配前面字符 0次或1次 21? 2
21
(無論是否有1都會(huì)被匹配)
* {0,n} 0次或多次 21* 2
21
211111
+ {1,n} 1次或多次 21+ 2(沒有1時(shí)不會(huì)被匹配)
21
211111
{} 量詞或代碼塊 a{3}
a{2,5}
aaabaa (3個(gè)a,2個(gè)不會(huì)被匹配)
aaabaa (2到5個(gè)a會(huì)被匹配)
[] 字符組(字符集:一類字符的集合) [abc]
字符范圍[a-z]
dabec
a-z任意小寫字母
同理有:[A-Z],[0-9],[a-zA-Z]
() 分組朴下,子表達(dá)式,優(yōu)先 ([ab])x\1 axa
bxb
axb
\1指代前面的[ab]這個(gè)子表達(dá)式的匹配值
- 分隔線 - -
以下一些由\開頭的特殊意義字符 注意有時(shí)需要"\\"來轉(zhuǎn)義為\與后面的字符配合成新的意義使用
\b 單詞邊界,表示單詞的起始 \baaa\b
\baaa
baaa aaa aaab
baaa aaa aaab
\B 非單詞邊界 \Baaa\B baaa aaa baaab aaab
\d 數(shù)字 \d 124SA236SFa
\D 非數(shù)字 \D 124S<:">A236SFa
\s 匹配任何空白字符,包括空格竿屹、制表符灸姊、換頁符等等。 \s 等價(jià)于[ \f\n\r\t\v] (后續(xù)介紹)
\S 匹配任何非空白字符 \S 等價(jià)于[^\f\n\r\t\v]
\w 匹配包括下劃線的任何單詞字符碗誉。 等價(jià)于[A-Za-z0-9_]
\W 匹配任何非單詞字符。 等價(jià)于[^A-Za-z0-9_]
tip 大小寫表示的含義相反
\f 匹配一個(gè)換頁符 等價(jià)于\x0c和\cL
\n 匹配一個(gè)換行符 等價(jià)于\x0a和\cJ
\r 匹配一個(gè)回車符 等價(jià)于\x0d和\cM
\t 匹配一個(gè)制表符 等價(jià)于\x09和\cI
\v 匹配一個(gè)垂直制表符 等價(jià)于\x0b和\cK
tip 多用于支持正則查找替換的編輯器
\xn 匹配n,其中n為字符的十六進(jìn)制值尝苇。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長糠溜。 \x41
\x401
A
等價(jià)于\x04&1正則表達(dá)式中可以使用ASCII編碼。
\num 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)向后引用凯肋。
如果\n之前至少n個(gè)獲取的子表達(dá)式汽馋,則n為向后引用[1]
否則悄雅,如果n為八進(jìn)制數(shù)字(0-7)铁蹈,表示字符的進(jìn)制值握牧。[2]
(.)\1

\101
匹配兩個(gè)連續(xù)的相同字符aa bb ccda
A
\uxxxx 字符的Unicode值 \u00A9 ? 版權(quán)符號(hào)
優(yōu)先級(jí) 符號(hào)
最高 \
( )、(?: )览徒、(?= )颂龙、[ ]
*、+躲叼、?企巢、{n}、{n,}流礁、{m,n}
^神帅、$、經(jīng)\轉(zhuǎn)義的
最低 |

其它

  • 貪婪型找御,懶惰型元字符
    * 和+,{n,} 貪婪型元字符霎桅,它們?cè)谶M(jìn)行匹配時(shí)的行為模式是多多益善而不是適可而止的。
    *?遇革,+?,{n,}? 懶惰型元字符(上面的加?后綴) 適可而止
    例:字符串 123456
    3\d+匹配結(jié)果:123456 3及其以后的數(shù)字全被匹配揭糕,多多益善
    3\d+?匹配結(jié)果:123456 3及其后的一個(gè)數(shù)字被匹配,適可而止

  • 前后查找 有時(shí)候需要正則表達(dá)式標(biāo)記要匹配的文本的位置(而不僅僅是文本本身)

  1. (?=) 正向前查找 其實(shí)就是一個(gè)以?=開頭的子表達(dá)式
  • (?<=)正向后查找 查找出現(xiàn)在匹配文本之后的字符(js不支持)
  • (?!) 負(fù)向前查找 指的是不與給定模式相匹配的文本 不常用
  • (?<!)負(fù)向后查找 同上
    例:.{2}(?=(abc)) 結(jié)果 xxxabc (abc前面的兩個(gè)字符)
    (?<=al).*(?=xl) 結(jié)果alcccxl (al與xl中間的字符 )

實(shí)例

掌握上面的這些基礎(chǔ)理論揪漩,應(yīng)該就可以應(yīng)付正則的大部分使用場景奄容,能看能寫产徊。

運(yùn)行效果囚痴。好累审葬,感覺再也不會(huì)寫這種傻逼彩蛋了
快速去掉雙引號(hào)

小結(jié)

正則的語法還是比較簡單易懂的,只是用的頻率不是那么高鸦难,所以容易忘合蔽,所以做下筆記,以后忘了看自己寫的東西終歸是更容易理解沃斤,也希望對(duì)大家有幫助刃宵。


  1. 向后引用(back-reference)一個(gè)子字符串(substring),該子字符串與正則表達(dá)式的第num個(gè)用括號(hào)圍起來的子表達(dá)式(subexpression)匹配哮针。其中num是從1開始的正整數(shù)坦袍,其上限可能是99 ?

  2. 此處八進(jìn)制的值為0-277對(duì)應(yīng)ASCII碼的八進(jìn)制值 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末键闺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筛武,更是在濱河造成了極大的恐慌挎塌,老刑警劉巖榴都,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異竿音,居然都是意外死亡拴驮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宽气,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萄涯,“玉大人,你說我怎么就攤上這事钞楼“懒眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵宛琅,是天一觀的道長嘿辟。 經(jīng)常有香客問我片效,道長,這世上最難降的妖魔是什么昙读? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任蛮浑,我火速辦了婚禮只嚣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘册舞。我一直安慰自己调鲸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布饶唤。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祸穷。 梳的紋絲不亂的頭發(fā)上勺三,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天吗坚,我揣著相機(jī)與錄音,去河邊找鬼车份。 笑死牡彻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缎除。 我是一名探鬼主播总寻,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渐行,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衰倦?” 一聲冷哼從身側(cè)響起旁理,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤孽文,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后沉衣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體减牺,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年既荚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栋艳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴叨,死狀恐怖兼蕊,靈堂內(nèi)的尸體忽然破棺而出问拘,到底是詐尸還是另有隱情,我是刑警寧澤绪杏,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布纽绍,位于F島的核電站拌夏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盹愚。R本人自食惡果不足惜站故,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愈腾。 院中可真熱鬧岂津,春花似錦、人聲如沸橱乱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叶摄,卻和暖如春安拟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背会傲。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工淌山, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顾瞻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓退渗,卻偏偏與公主長得像蕴纳,于是被迫代替她去往敵國和親古毛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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