首页 > 代码库 > 正则表达式(二)——元字符

正则表达式(二)——元字符

   正则中的字符分为元字符和一般字符,一般字符就匹配它本身(写什么就是什么,比如正则中写字母‘a’,匹配的时候就匹配字母‘a’),而元字符是正则表达式中最基本的内容,也是最核心的内容,基本上所有的正则表达式都由“元字符”组成,元字符就是正则表达式的基础。在此文中,会涉及到字符组,多选结构,点号以及预定义字符集的基本介绍。

什么是“元字符”

   所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符。这些元字符(专用的字符或则字符组),可以代替多个一个或多个字符。下面用一个图来展示一下基本的元字符

   上面这个图包含了基本的‘元字符’,包括量词、边界匹配、字符匹配、逻辑、分组、环视和一些特殊的构造等等这些内容。

元字符——字符组

   字符组分为两种:普通字符组和排除型字符组

   一、普通字符组

   “[······]”,以左边这种结构出现的正则表达式,就叫普通的字符组,它会匹配[·····]结构体中的字符的任意一个字符。

   例如:[abc]

   字符‘a’能匹配‘a’,字符‘b’能匹配‘b’,字符‘c’能匹配‘c’,而[abc]则表示匹配‘a’、‘b’、‘c’三个字符的中任意一个。

   从编程的角度看就是一个‘或’的判断条件等同于另一个正则表达式(a|b|c),要不就匹配‘a’,要不就匹配‘b’,要不就匹配‘c’。

   举个简单的例子,咱走一遍流程。

   正则表达式:‘gr[ae]y’

   首先匹配‘g’,接下来是‘r’,然后是一个‘a’或‘e’,最后是一个‘y’。由这样的流程可以知道,这个正则表达式可以匹配的文本为‘grey’或者‘gray’

   我们也可以用连字符‘-’来表示一个范围,配合[······]结构体来匹配一个范围中的一个字符。比如:

   正则表达式:[a-d0-9]

   这个正则表达式可以匹配0,1,2,3,4,5,6,7,8,9,a,b,c,d中的任意一个字符。这种有两个包括两个以上范围的正则表达式叫做‘多重范围’

   ‘-’连字符只有在[·····]结构体中才是元字符,否则它只能匹配普通的连字符号,当然,如果‘-’字符在[·····]结构体的开头,那么它也只是普通的字符,例如

   正则表达式:[-!.?abc]

   此时的‘-’就表示它本身,这个正则表达式可以匹配‘-’,‘!’,‘.’,‘?’,‘a’,‘b’,‘c’中的任意一个

   二、排除型字符组

   “[^·····]”,以左边这种结构出现的正则表达式,就叫做排除型字符组,它会匹配[^·····]结构体中的字符以外的任意一个字符,就是说,除了^·····]结构体中的字符,其它字符都能匹配。

   例如:[^abc]

   上面这个正则表达式就能匹配d,匹配e,匹配d-z,A-Z,匹配任意数字,匹配‘?’之类的符号,但是就是不能匹配‘a’,‘b’,‘c’这三个字符中的任意一个

元字符——点号匹配任意字符

   ‘.’点号可以匹配除换行符\n的其余任意字符(只要点号不在字符组内,在字符组内的元字符意义都是它本身)。当然,如果要匹配点号本身,就需要使用转义字符‘\’来将转义,即‘\.’

元字符——多选结构

   多选结构和字符组类似,都是‘或’的意思,在几个选一个。但它们最大的区别在于,‘字符组’只能在单个字符间做选择。而‘多选结构’是在多个表达式之间做选择。例如:

   正则表达式:‘(grey|gray)

   上面这个正则表达式的意思就是,要么匹配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。而他们的大些形式,则表示他们的差集合


   元字符也包括了量词,位置匹配符,括号,反向引用这些内容,这些内容会在后续单独分开讲解。


   参考:《精通正则表达式——第三版》

        《Python中的正则表达式教程》