写点什么

正则表达式.01 - 元字符

用户头像
insight
关注
发布于: 2021 年 03 月 06 日
正则表达式.01 - 元字符

简介

正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。简单的说就是用来描述字符串的规则。它的强大之处在于可以查找符合某个规则的文本。


它常见的三种功能为:

  • 校验数据的有效性

  • 查找符合要求的文本

  • 对文本进行切割和替换

为什么要学习正则

作为一名程序员,掌握了正则能帮助我们在写代码的时候快速匹配相关代码,快速替换相似配置,快速提取大文本中的有效信息,能让我们减少在重复繁琐的工作泥潭中挣扎。


元字符

在正则中,普通字符表示的还是原来的意思,但当你想对一些含有某些规律的文本进行匹配时,就需要用到元字符了。


所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,元字符是构成正则表达式的基本元件。正则就是由一系列的元字符组成的。


可以把元字符大致分成这几类:

  • 表示单个特殊字符的

  • 表示空白符的

  • 表示某个范围的

  • 表示次数的量词

  • 另外还有表示断言的,我们可以把它理解成边界限定


接下来就按照这几个分类进行逐一讲解。

特殊单字符



表示特殊单个字符的元字符

  • 英文的点(.)表示换行以外的任意单个字符

  • \d 表示任意单个数字,\D 任意非数字

  • \w 表示任意单个数字或字母或下划线, \W 任意非数字字母下划线

  • \s 表示任意单个空白符,\S 任意非空白符


空白符

在处理文本的时候会遇到空格、换行等空白符。其实在写代码的时候也会经常用到,换行符 \n,TAB 制表符 \t 等。有编程经验的程序员肯定都知道,不同的系统在每行文本结束位置默认的“换行”会有区别。比如在 Windows 里是 \r\n,在 Linux 和 MacOS 中是 \n。在正则中,也是类似于 \n 或 \r 等方式来表示空白符号,只要记住它们就行了。

平时使用正则,大部分场景使用 \s 就可以满足需求,\s 代表任意单个空白符号。 \s 能匹配上各种空白符号,也可以匹配上空格。换行有专门的表示方式,在正则中,空格就是用普通的字符英文的空格来表示

其余空白符如下:

  • \r 回车

  • \n 换行符

  • \f 换页

  • \t 制表

  • \v 垂直制表

  • \s 任意空白符


量词

单字符和空白符都只能用来匹配单个字符,当我们需要匹配 某个部分“重复 N 次”“至少出现一次”“最多出现三次”等等这样的字符时,就需要用到量词的元字符了。


在正则中:

  • 英文的星号(*)代表出现 0 到多次,

  • 加号(+)代表 1 到多次,

  • 问号(?)代表 0 到 1 次

  • {m}代表出现 m 次。

  • {m,} 至少出现 m 次。

  • {m,n}代表 m 到 n 次。


比如,在文本中“颜色”这个单词,可能是带有 u 的 colour,也可能是不带 u 的 color,我们使用 colou?r 就可以表示两种情况了。在真实的业务场景中,比如某个日志需要添加了一个 user 字段,但在旧日志中,这个是没有的,那么这时候可以使用问号来表示出现 0 次或 1 次,这样就可以表示 user 字段存在和不存在两种情况。


范围

有些时候我们需要在一个特殊的范围里找符合要求的字符,比如要找出所有元音字母 aeiou 的个数,这时就需要用到范围符号了。


在正则表达式中,表示范围的符号有四个分类,如下图所示。


  • 首先是管道符号,我们用它来隔开多个正则,表示满足其中任意一个就行,比如 ab|bc 能匹配上 ab,也能匹配上 bc,在正则有多种情况时,这个非常有用。

  • 中括号[]代表多选一,可以表示里面的任意单个字符,所以任意元音字母可以用 [aeiou] 来表示。

  • 另外,中括号中,我们还可以用中划线表示范围,比如 [a-z] 可以表示所有小写字母。

  • 如果中括号第一个是脱字符(^),那么就表示非,表达的是不能是里面的任何单个元素。


比如某个资源可能以 http:// 开头,或者 https:// 开头,也可能以 ftp:// 开头,那么资源的协议部分,我们可以使用 (https?|ftp):// 来表示。


发布于: 2021 年 03 月 06 日阅读数: 12
用户头像

insight

关注

不要混淆行动与进展、忙碌与多产。 2018.11.17 加入

永远都是初学者

评论

发布
暂无评论
正则表达式.01 - 元字符