<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
正則表達式:
正則表達式定義了由一個或多個字符串組成的集合。簡單字符串也是正則表達式,它定義了由該字符串自身組成的集合。複雜的正則表達式使用字母、數字、和特殊字符來定義不同的字符串。正則表達式匹配它定義的任何字符串。
字符:
字符除換行符以外的其他任意字符。大多數字符代表他們自身,而那些不代表自身的字符稱爲特殊字符。如果需要特殊字符代表自身,那麼需要將這些字符轉義。
定界符:
定界符是指標誌着正則表達式開始和結束的字符。正則表達式的定界符通常是一個特殊字符,因爲該字符不代表自身,而是標誌表達式的開始和結束。通用是採用'/' 作爲定界符。
簡單字符串:
最基本的正則表達式是隻包含非特殊字符和定界符的簡單字符串。只與它自身匹配。
/ring/ 、/Thursday/ 、/or not/ 等
特殊字符:
使用特殊字符使得正則表達式匹配多個字符串。包含特殊字符的正則表達式總是匹配儘可能長的字符串。
句點:
句點'.' 可以與任何字符匹配( 匹配任一單個字符) 。
/ .alk/ 、/.ing/ 等等
方括號:
方括號'[]' 用來定義一個字符來,該類與方括號內任意的單個字符匹配。左方括號後緊跟脫字符'^' 來定義的字符類與方括號內定義字符之外的任意其他單個字符匹配。使用連字符'-' 可以指定字符範圍。
/[bB]ill/ 、/t[aeiou].k/ 、/# [6-9]/ 、/[^a-zA-Z]/ 等等。
星號:
星號跟隨在代表某個字符的正則表達式之後,表示與該正則表達式所匹配字符的0 個或多個匹配。跟在句點後的星號的正則表達式可以匹配任意字符串。
/ab*c/ 、/ab.*c/ 、/t.*ing/ 、/[a-zA-Z]*/ 、/(.*)/ 、/([^)]*)/ 等等
脫字符和美元符號:
以脫字符'^' 開始的正則表達式只能匹配位於行首的字符串。以美元符號'$' 結尾的正則表達式只能匹配行末尾的字符串。
/^T/ 、/^+[0-9]/ 、/:$/ 等等
大於或小於符號:
以小於符號'<' 開始的正則表達式只能匹配位於字的開始的字符串。以大於符號'>' 結尾的正則表達式只能匹配字的結尾的字符串。
/<and>/ 、/<[0-9]/ 等等
轉義特殊字符:
在特殊字符之前使用反斜槓可以轉義除數字和圓括號 外的特殊字符。
/end/./ 、//// 、//*/ 、//[5/]/ 、/and//or/ 等等
規則:
最長匹配
正則表達式總是與儘可能長的字符串匹配,從行的開始儘可能地向前匹配。
空正則表達式
對於某些工具,空正則表達式代表上次使用的表達式。
括號表達式:
使用轉義圓括號'/(' 和'/)' 可以將正則表達式括起來。正則表達式並不試圖匹配轉義的圓括號,因此帶有轉義圓括號的正則表達式與沒有該圓括號的正則表達式匹配的字符串相同。
//(rexp/)/ 同 /rexp/ 、/a/(b*/)c/ 同/ab*c/
轉義圓括號可以嵌套使用。
//([a-z]/([A-Z]*/)x/)/ 則在'3 t dMNORx7 l u' 匹配'dMNORx' ;其中第一個括號表達式匹配'dMNORx' ,第二個括號表達式與'MNOR' 匹配。
替換字符串:
可以使用特殊字符'&' 和轉義數字'/n' 來代表對應替換字符串中的匹配字符串。
'&' :
在替換字符串中,符號'&' 代表搜索字符串( 正則表達式) 所匹配的字符串的值。
vim 中
:s/ [0-9][0-9]* /NN&NN/
注意上面的黑體表示與任意數字字符串匹配。
轉義數字:
在搜索字符串中,括號正則表達式如'//(xyz/)/' 與不帶括號的正則表達式匹配的字符串相同'/xyz/' ;在替換字符串中,轉義數字'/n' 代表搜索字符串的第n 個括號正則表達式'/(' 開始匹配的字符串。
vim 中
:1,$s//([^,]*/), /(.*/)//2 /1/