標籤:style blog http color 使用 strong
正則中的字元分為元字元和一般字元,一般字元就匹配它本身(寫什麼就是什麼,比如正則中寫字母‘a’,匹配的時候就匹配字母‘a’),而元字元是Regex中最基本的內容,也是最核心的內容,基本上所有的Regex都由“元字元”組成,元字元就是Regex的基礎。在此文中,會涉及到字元組,多選結構,點號以及預定義字元集的基本介紹。
什麼是“元字元”
所謂元字元就是指那些在Regex中具有特殊意義的專用字元。這些元字元(專用的字元或則字元組),可以代替多個一個或多個字元。下面用一個圖來展示一下基本的元字元
上面這個圖包含了基本的‘元字元’,包括量詞、邊界匹配、字元匹配、邏輯、分組、環視和一些特殊的構造等等這些內容。
元字元——字元組
字元組分為兩種:一般字元組和排除型字元組
一、一般字元組
“[······]”,以左邊這種結構出現的Regex,就叫普通的字元組,它會匹配[·····]結構體中的字元的任意一個字元。
例如:[abc]
字元‘a’能匹配‘a’,字元‘b’能匹配‘b’,字元‘c’能匹配‘c’,而[abc]則表示匹配‘a’、‘b’、‘c’三個字元的中任意一個。
從編程的角度看就是一個‘或’的判斷條件等同於另一個Regex(a|b|c),要不就匹配‘a’,要不就匹配‘b’,要不就匹配‘c’。
舉個簡單的例子,咱走一遍流程。
Regex:‘gr[ae]y’
首先匹配‘g’,接下來是‘r’,然後是一個‘a’或‘e’,最後是一個‘y’。由這樣的流程可以知道,這個Regex可以匹配的文本為‘grey’或者‘gray’
我們也可以用連字號‘-’來表示一個範圍,配合[······]結構體來匹配一個範圍中的一個字元。比如:
Regex:[a-d0-9]
這個Regex可以匹配0,1,2,3,4,5,6,7,8,9,a,b,c,d中的任意一個字元。這種有兩個包括兩個以上範圍的Regex叫做‘多重範圍’
‘-’連字號只有在[·····]結構體中才是元字元,否則它只能匹配普通的連字號號,當然,如果‘-’字元在[·····]結構體的開頭,那麼它也只是普通的字元,例如
Regex:[-!.?abc]
此時的‘-’就表示它本身,這個Regex可以匹配‘-’,‘!’,‘.’,‘?’,‘a’,‘b’,‘c’中的任意一個
二、排除型字元組
“[^·····]”,以左邊這種結構出現的Regex,就叫做排除型字元組,它會匹配[^·····]結構體中的字元以外的任意一個字元,就是說,除了^·····]結構體中的字元,其它字元都能匹配。
例如:[^abc]
上面這個Regex就能匹配d,匹配e,匹配d-z,A-Z,匹配任一數字,匹配‘?’之類的符號,但是就是不能匹配‘a’,‘b’,‘c’這三個字元中的任意一個
元字元——點號匹配任一字元
‘.’點號可以匹配除分行符號\n的其餘任一字元(只要點號不在字元組內,在字元組內的元字元意義都是它本身)。當然,如果要匹配點號本身,就需要使用逸出字元‘\’來將轉義,即‘\.’
元字元——多選結構
多選結構和字元組類似,都是‘或’的意思,在幾個選一個。但它們最大的區別在於,‘字元組’只能在單個字元間做選擇。而‘多選結構’是在多個運算式之間做選擇。例如:
Regex:‘(grey|gray)’
上面這個Regex的意思就是,要麼匹配grey,要麼匹配gray,匹配的結果等同於‘gr[ae]y’再舉個例子,就是:
‘Jeff(rey|ery)’
先匹配‘J’,接下倆匹配‘e’,接下來匹配‘f’,接下來匹配‘f’,再接下來匹配‘rey’或者‘ery’的的其中一個,這就是多選結構執行的流程
元字元——預定義字元集
預定義字元集就像中展示的,他們用‘\字母’的形式來代表多個字元,\d代表0至9,\s代表空白字元,\w代表0至9,a至z,A至Z。而他們的大些形式,則表示他們的差集合
元字元也包括了量詞,位置匹配符,括弧,反向引用這些內容,這些內容會在後續單獨分開講解。
參考:《精通Regex——第三版》
《Python中的Regex教程》