正则表达式.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)://
来表示。
版权声明: 本文为 InfoQ 作者【insight】的原创文章。
原文链接:【http://xie.infoq.cn/article/bdd2b4ce3cf1cb942c2fb7ed2】。文章转载请联系作者。
评论