正则表达式基础
1、正则表达式的概述
正则表达式指的就是采用固定的一种模式去匹配我们所需要的文本串的这种模式。在下面的内容中,主要介绍正则表达式中的元字符的概念与使用,转移字符、正则表达式中的重复、贪婪和懒惰等基本概念和应用。
2、元字符、转义字符、重复的介绍
2.1 元字符的概念
元字符:指的就是在正则表达式中的单个符号,每一个符号可以匹配到文本中的不同内容,常见的元字符如下表所示:
元字符 | 作用 |
---|---|
* | 匹配任意字符的任意长度字符串 |
? | 匹配任意的,长度为一的字符串 |
. | 匹配除了换行符之外的任意一个字符 |
\w | 匹配任意一个字母、数字、下划线、汉字 |
\s | 匹配任意的一个空白符 |
\d | 匹配任意一个数字 |
\b | 匹配一个单词的开始和结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
对于上述元字符,将字母大写之后,匹配的是原来相反意义的字符。具体如下表所示:
元字符 | 作用 |
---|---|
\W | 匹配除了字母、数字、下划线、汉字的任意一个字符 |
\S | 匹配除了空白符意外的任意一个字符 |
\D | 匹配除了数字之外的任意一个字符 |
\B | 匹配除了单词开始和结束的其他字符 |
2.2 转义字符和特殊形式
字符 | 作用 |
---|---|
‘\’ | 表示转义 |
[abcde] | 在匹配的时候,会匹配[]中的任意一个 |
[^abcde] | 在匹配的时候,会匹配除了[]中字符的任意一个 |
[a-z] | 表示匹配a-z的任意一个字符 |
[A-Z] | 表示匹配A-Z中的任意字符 |
[A-Za-z0-9] | 匹配a-zA-Z0-9中的任意一个字符 |
2.3 正则表达式中的重复
重复,指的就是字符的多次出现。正则表达式中的重复主要如下表所示:
字符 | 作用 |
---|---|
* | 重复0次或者更多次 |
+ | 重复1次或者更多次 |
? | 重复0次或者是1次 |
{n,} | 至少重复n次 |
{n,m} | 重复n次到m次 |
2.4 分支条件
用’|'将各个正则表达式的匹配条件分隔开,从左到右的使用各个条件去匹配字符串,字符串满足某一个条件之后就不在匹配后续的表达式。例如 0\d{2}-\d{8}|0\d{3}-\d{8},该正则表达式的意义为匹配电话号码,0开头的,后面是3位或者2位数字,之后为-,再后面是8位数字的字符串。
2.5[ ]的使用
[]表示 | 元字符 |
---|---|
[0-9] | \d |
[0-9a-zA-Z] | \w |
2.6 举例说明
021-1234567 025-12345678 024-123456789 => 0\d{3}-\d{7,9}
3、分组的概念以及贪婪模式和懒惰模式
3.1 分组的概念
分组是指将整个的正则表达式分成不同的子表达式,使用()进行分组,其主要的作用是用来提取()内正则表达式所匹配的字符串。例如:023-12456789 0124-124567989 =>(0\d{1,3}-)\d{7,9} 。还有一种情况是将其作为一种子模式进行重复,例如:(\d{1,3}){3}\d{1,2},将前面的分组重复三次。匹配的结果为023和0124。每一个分组可以具有名字,其命名格式为(?<分组名称>子表达式)。注意:(?:exp)表示不捕获匹配的文本,也不进行分组。
3.2贪婪模式和懒惰模式
贪婪模型:在使用正则表达式进行匹配的过程中,在保证匹配成功的前提下,使用最多的重复。
懒惰模式:匹配任意数量的重复,但是在能使匹配成功的前提下,使用最少的重复。
贪婪模式和懒惰模式的基本语法为:
语法 | 作用 |
---|---|
.* | 贪婪模式,重复0次或者是多次,尽可能多的进行重复 |
.? | 贪婪模式,重复1一次或者是多次,尽可能多的进行重复 |
.*? | 懒惰模式,重复0次或者多次,尽可能少的重复 |
.+? | 懒惰模式,重复1次以上,尽可能少的重复 |
.?? | 懒惰模式,重复0次或者1次,尽可能少的重复 |
.{N,M} | 懒惰模式,重复n到m次,尽可能少的匹配 |
.{n,}? | 懒惰模式,至少重复n次,尽可能少的进行匹配 |