首页 > 代码库 > 正则表达式(二)——元字符
正则表达式(二)——元字符
正则中的字符分为元字符和一般字符,一般字符就匹配它本身(写什么就是什么,比如正则中写字母‘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中的正则表达式教程》