正则入门学习笔记
在我们平常写代码过程中,多多少少会涉及到正则表达式。作为计算机领域最伟大的发明之一,强大的正则表达式可以极大的提高我们处理文本的工作效率。但是我们在使用的过程中大多数都是在网上搜一下现成的例子然后拿过来使用。
其实正则表达式并不难学,下面就系统的来看一下正则表达式吧。
什么是正则
正则的英文名称是"Regular Expression",简称RE。顾名思义就是"描述文本内容组成规律的表示方式"。
在编码中我们可以使用正则来简化文本处理逻辑。在命令行中我们可以使用正则帮助我们查找或者编辑、替换文件中的内容。在各种编辑器中我们可以使用正则帮助我们更轻松的完成查找和替换。
从上面我们可以看出来正则表达式是一款非常强大的文本处理工具。我们可以利用它:
- 校验数据有效性。
- 也可以提取文本中我们所需要的内容。
- 还可以从做文本内容替换等操作。
基本规则
元字符
我们知道上面提到的正则强大的功能,但是正则的这些动能都建立在一个基础之上,那就是:正则可以查找到符合某个规则的文本。
举个例子,我们可以在一堆文本中查找数字,在不需要正则的情况下我们需要输入"0~9"这十个数字。但是在正则中我们只需要输入"\d"就可以表示数字了。如果我们需要查找连续的数字,比如说5个,我们就可以使用"\d{5}“。
除了”\d"和{5}之外,还有一些其他在正则查找中使用的特殊字符,这些我们称之为元字符。即在正则表达式查找过程中使用到的特殊字符。
从上面的例子中我们可以看到元字符在正则查找中扮演了重要的角色,可以说是正则表达式的重要组成元件。
下面我们就来看一下元字符的基本规则:
单字符
我们来看一下我们平常使用到的单字符
- "."表示任意字符,换行除外
- “\d"表示任意数字,”\D"表示任意"非数字"
- “\w"表示任意数字、字母、下划线,”\W"表示任意非数字、字母、下划线
- “\s"表示空白符,”\S"表示任意非空白字符
我们可以通过这个链接测试一下这些元字符的作用。
空白符
在文本的组成中,并不是只有数字字符等,还有一些其他的空白字符,其中空白符细分之下包括换行符、回车符(在不同的系统中,文字末尾的换行会有所区别)、换页符等
下面我们来看一下空白符:
- “\r” 表示回车符
- "\n"表示换行符
- "\f"表示换页符
- "\t"表示制表符
- "\v"表示垂直制表符
- "\s"表示任意空白符
这里我们单独说一下"\s","\s"虽然能匹配到大多数的空白符,但是不能匹配换行符。
量词
上面我们在"查找五个数字"的过程中有用到"{5}“,这里的”{5}"就是我们要即将介绍的量词。下面我们来看一下量词的分类:
- "*"表示0到多次
- "+"表示1到多次
- "?"表示0到1次
- "{m}"表示出现m次
- "{m,}"表示出现至少m次
- "{m,n}"表示m到n次
我们可以通过下面的链接来测试一下量词的作用。
范围
除了量词之外,我们也可以在正则中创建分支结构来匹配多种选择,例如我们要匹配字符串中的"liberate或者liberal",这里我们可以通过"liberate|liberal"来匹配两者,这里面的"|"便表示范围符。
下面我们来看一下范围符的内容:
- “|”,表示或
- "[…]"表示多选一,任意单个元素
- "[a-z0-9]"表示匹配字母a~z或者字母0~9之间的任意元素
- "[^a-z]“表示表示不能匹配a~z字母中的任意元素,这里的”^"表示取反
这里首先说一下"|“和”[]“的区别,两者虽然都能表示多选一的关系,但是”[]“表示的是范围中的任意单个元素,”|"则表示符号两侧的元素,这些元素可以是单个也可以是多个。
上面的内容,我们可以通过这个链接来测试一下。
断言
先举个简单的例子:假如我们想简单的匹配一下手机号,我们可以写成这样"\d{11}"。
但是这样有个问题,如果文本里面同事存在18位的身份证号信息,那么我们同样可以匹配上,可以看看这个例子
这个时候我们需要匹配单独出现的11位数字,比如说这11位数字的左边和右边不能出现数字,所以我们可以修改我们的正则为这样
这里我们在匹配的过程中,对文本的位置信息有明确的要求,为了解决这个问题,正则提供了一系列的元字符来匹配位置信息,这些元字符就是断言。
常见的断言分为三类,单词边界、行起始/结束位置、环视:
♣ 单词边界
\b表示"单词边界",是"Boundary"的简称。"\b"的作用是匹配一个单词边界,也就是指单词和空格间的位置。例如我们想找一个单词"correlate",我们可以使用"\bcorrelate\b",可以看一下这个例子
- 注意,这里的"单词和空格间的位置"很重要,它是一个空元素。
♣ 行的开始或结束
同样是断言字符,它表示的是文本每行的开始和结束,如果我们要匹配的内容主要中出现在一行文本开头或结尾,我们就可以使用"^ $"来匹配。
- "^"表示匹配输入字符串的开始位置
- "$"表示匹配输入字符串的结束位置
这里有个例子可以测试一下 </