正则表达式(regex)的定义

正则表达式是一套特殊字符和格式组成的对字符串进行运算的表达式,用表达式对目标字符串从左到右依次匹配,达成检索、过滤、摘取的目的。

正则表达式的功能
  1. 判断用户输入内容是否符合要求。将用户输入的内容与预先定义的表达式比对,若不符合要求则提示用户重输。通过表达式约束输入的数据可以能够提高程序效率并减轻服务器压力。常见案例如表单验证等。
  2. 从文件中获取所有符合表达式的内容。能够高效的从大段字符串中快速找到符合表达式的内容。常见案例如日志分析、爬虫等。
元字符字符组

描述的是一个位置上能出现的所有可能性(一对中括号只表示一个字符位置)。案例如下:

量词

量词用来约束元字符生效次数,量词只能约束它前面的一个单元,可以是字符、字符组或分组。

{n} 表示匹配n次

{n,} 表示匹配最少n次

{n,m} 表示匹配最少n次、最多m次

? 表示匹配0次或1次 {0,1}

表示匹配1次或多次 {1,}

* 表示0次或多次 {0,}

关于 ? * 这三个符号经常会用到,请参考下图,务必要熟记它们的作用域。

正则表达式常用方法有哪些(正则表达式之详细梳理)(1)

请务必记住 ? * 这三个符号作用域

匹配模式(默认最大匹配)

在量词范围内尽可能多的匹配内容。例如:.*x表示匹配任意字符任意多次,遇到最后一个x才停止。

案例

表达式:\d{3,}6

目标:1234789135661947678914

结果:12347891356619476 (按回溯算法,从123开始一直匹配数字直到非数字或结束,再回溯找6)

在量词范围内尽可能少的匹配内容,量词后面加个?表示最小匹配。例如:.*?x表示匹配任意字符任意多次,遇到首个x就停止。

案例

表达式:\d{3,}?6

目标:1234789135661947678914

结果:12347891356(按惰性匹配原则,从123开始一直匹配数字,一旦遇到6即停止匹配)

注意:2个??在一起的情况,前一个?是量词,表示匹配0或1次;后一个?表示最小匹配。例如:

1\d?3可以匹配13、123、133中的全部;1\d??3可以匹配13、123、133中的13、123、13(133不能匹配到,按惰性原则1数字可有可无,再后面找3,)

转义符

若需要使用元字符本身的意义时需要转义,在元字符前加\即可。

另外有一些有特殊意义的元字符,放在字符组中,会取消它的特殊意义。例如:

[().* ?] 中括号中的这些符号在字符组中会取消它们的特殊意义。

[a\-c] -在字符组中表示范围,若不希望它表示范围,需要用\转义或放在字符组的最前面或最后面。

,