在处理正字符串的时候,经常会有一些复杂规则的字符串需求,
正则表表达式就是描述这些规则的公工具。
换句话说。
正则表达式就是记录文本规则的代码。
前两期我们说了相对简单的行定位符
和元字符
还有限定符
还没有看过的小伙伴可以去看看
今天我们来看看正则表达式中的字符、排除字符、选择字符和转义字符
字符类
正则表达式查找数字和字母应该算是最简单的了。因为已经有了我们之前讲过的元字符是专门应用于数字和字母的。例如\d,\w等等。
但是这里引入一个新的问题,如果我要匹配没有预定义的字符例如(a,o,e)怎么办?
来接着往下看,其实这个问题不难。咱们只需在[]中列出它们就好了。
例如[aoe]的意思就是任意一个字母。[.?!]匹配的是标点符号’,’,’?‘和’!’。还记得之前讲过的\d吧,它匹配的是任意的数字。在这里也可以使用[0-9]来表示;
同理如果只考虑英文字母和数字的话那它和[0-9a-zA-Z]的意思也是一样的!
比如字符串helloword123,/[0-9]+/g可以匹配数字,即匹配结果为123。
这里要注意的一点是如果你有匹配汉字的需求,可以使用’[\u4e00-\u9fa5]’;
如果要匹配许多个汉字的话,可以使用’[\u4e00-\u9fa5]+’;
排除字符
在上面的字符类中说的是匹配符合指定字符串的字符类,现在讲的排除字符其实是和它刚好相反的。
就是匹配不符合指定字符串的字符类。
正则表达式已经提供了’‘字符,前面我们讲过,单独的’'指的是字符串的开头。这里的[^…]指的是非的意思
比如字符串 helloword123,/[^0-9]+/g 可以匹配非数字,即匹配结果为 helloword。
同样的,/[^he]+/g 可以匹配非h非e的字符,匹配结果为lloword123。
选择字符
当我们有匹配身份证的需求的时候,首先需要了解一下身份证组成的规则,身份证号长度为15或者18。当身份证证号为15位的时候,全为数字;当身份证号位18位的时候,分为两种情况:前17位全为数字,后面是校验位。可能是X,也有可能是数字。
在上述的案例分析中,包含着选择的逻辑,这就需要选择字符(|)来实现了。这个字符的意思就是与的意思。
咱们来看看身份证的正则写法:
> (^\d{15}$) | (^\d{18}$) | (^\d{17})(\d|X|x)$
这个正则表达式的含义就是匹配15位数字,或者18位数字。或者17位数字和最后一位,最后一位可能是数字或者X和x。
转义字符
其实正则表达式的转义和python的转义字符差不多,都是将一些比较特殊的字符(".","?","")等变为普通字符。
来看一组例子,我们现在有一个匹配ip的需求,例如匹配‘127.0.0.1’。如果直接匹配的的话,正则写法如下:
[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
但是这样显然是不正确的。因为’.‘会匹配任意一个字符。如果这样‘127202022’等这样的字符也会被匹配进来。所以需要对’.'进行转义。
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
这就是转义后正确的正则表达式!
好了,今天的分享就到此了,前面咱们主要理解一下概念性东西,后面会有案例一一讲明的。希望大家在看的同时也能动手去练练。毕竟好记性不如烂笔头么。明天咱们继续下一期正则表达式!