为什么要学正则表达式 - 4

简介: 为什么要学正则表达式 - 4

在处理正字符串的时候,经常会有一些复杂规则的字符串需求,

正则表表达式就是描述这些规则的公工具。

换句话说。

正则表达式就是记录文本规则的代码。

前两期我们说了相对简单的行定位符

和元字符

还有限定符

还没有看过的小伙伴可以去看看

今天我们来看看正则表达式中的字符、排除字符、选择字符和转义字符

字符类

正则表达式查找数字和字母应该算是最简单的了。因为已经有了我们之前讲过的元字符是专门应用于数字和字母的。例如\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}

这就是转义后正确的正则表达式!

好了,今天的分享就到此了,前面咱们主要理解一下概念性东西,后面会有案例一一讲明的。希望大家在看的同时也能动手去练练。毕竟好记性不如烂笔头么。明天咱们继续下一期正则表达式!

相关文章
|
6月前
|
Shell Linux
熟练使用正则表达式(1)
熟练使用正则表达式。
46 2
|
3月前
|
大数据 程序员
为什么要学正则表达式 - 1
为什么要学正则表达式 - 1
18 1
|
3月前
为什么要学正则表达式 - 2
为什么要学正则表达式 - 2
17 1
|
3月前
为什么要学正则表达式 - 3
为什么要学正则表达式 - 3
16 0
|
3月前
|
Python
为什么要学正则表达式 - 5
为什么要学正则表达式 - 5
20 0
|
5月前
|
程序员
程序员必知:常用正则表达式
程序员必知:常用正则表达式
26 0
|
6月前
|
Shell
熟练使用正则表达式(2)
熟练使用正则表达式。
38 2
 熟练使用正则表达式(2)
|
6月前
|
数据采集 自然语言处理 监控
正则表达式相关知识点
正则表达式相关知识点
64 0
|
移动开发 C语言
编译原理(八) 之 正则表达式
编译原理(八) 之 正则表达式
204 0
|
Python
正则表达式(面试会考)
正则表达式(面试会考)
179 0
正则表达式(面试会考)