一. 正则表达式概述
正则表达式 (regular expression):是用一个字符串来描述一个特征,然后用来去验证另一个字符串是否符合这个特征。
其作用主要用来1.验证字符串是否满足指定的特征;2.从一段文本中查找一定特征的片段;3.替换指定特征的字符串。
二. 规则
1.普通字符串匹配自身
字母、数字、汉字、下划线以及没有特殊规定的标点符号这些都是普通字符串,普通字符串匹配一个与之相同的字符。
eg: expression='a' ,string='same' 匹配成功,匹配到字符‘a’ 位置[1,2);(0 为第一个编号,'[' 表示包含,‘)’ 表示不包含 下同)。
2.转义字符
使用‘\’前缀转义特殊字符
\r 匹配回车、\n 匹配换行、 \t 匹配制表符、\\ 匹配‘\’自身
\^ 匹配‘^’ 符号、\$ 匹配‘$’ 符号、\. 匹配‘.’ 符号
3. 多种字符匹配
多种字符匹配这里是指,一个表达式可以匹配多种字符中的一个。
3.1 约定的表达式
\d 匹配任意一个数字,\D 匹配任意一个非数字字符
\w 匹配任意一个字母、数字或下划线,\W 匹配任意一个非字母、非数字、非下划线的字符
\s 匹配任意一个空白字符(空格、制表...),\S 匹配任意非空白字符
. 点号匹配除了换行符之外的任意一个字符
3.2 自实现的多种字符匹配表达式
使用方括号[...] 能够匹配方括号中的任意一个字符,使用[^...] 可以匹配出方括号中之外的任意一个字符。
eg: [abc$2] 匹配 ‘a’、‘b’、‘c’、‘$’、或者'2',[^abc$2] 匹配除了‘a’、‘b’、‘c’、‘$’和‘2’ 之外的任意字符。
方括号中可以使用‘-’横线标识范围
eg: [a-c] == [abc]
4. 匹配次数
{n} 匹配重复n次,eg:a{2} 匹配 ‘aa’
{m,n} 匹配重复至少m次最多n次,eg:a{2,4} 匹配 ‘aa’、‘aaa’、‘aaaa’
{m,} 匹配至少重复m次, eg: a{3,} 匹配 ‘aaa’、‘aaaa’、‘a...’
? 匹配 0次或1次 等价于 {0,1}
+ 匹配至少出现1次 等价于 {1,}
* 匹配任意次 等价于 {0,}
5. 特殊符号
5.1 定界符
匹配边界的特殊符号
^ 限定起始边界,eg:^a 匹配 ‘abc’ 中的‘a’,但不匹配‘bac’ 中的‘a’
$ 限定结束边界,eg:a$ 匹配 ‘cba’ 中的‘a’,但不匹配‘bac’ 中的‘a’
\b 限定一个单词的边界(单词与空格之间),eg:a\b 匹配‘ abc’ 中的‘a’,\ba 匹配‘cba ’中的‘a’
5.2 表达是关系符号
| ‘或’ 关系,匹配左右两边其中一个表达式
() 括号之内的表达式被看做一个整体,被次数表达是修饰是匹配整体的重复次数,eg:(abc){2} 匹配 abcabc
三. 高级规则
1. 次数匹配中的‘贪婪’与‘非贪婪’
‘贪婪’是在与匹配重复次数不定的表达式进行配置中,总是尽可能多的匹配。
eg:expression= d\w+ string=daadaad 匹配结果是 ‘daadaad’
‘非贪婪’是在与匹配重复次数不定的表达式进行配置中,总是尽可能少的匹配。
eg:expression= d\w+? string=daadaad 匹配结果是 ‘da’,'da'
总结:‘贪婪’和‘非贪婪’ 取决于是否限定做大的匹配次数,即{m,n}中的n
2. 反向引用
在匹配过程中可以使用小括号‘()’中的表达式匹配到的字符。在匹配的过程中表达式的后边部分通过反向引用使用之前小括号表达式匹配到的字符。方式是‘\1’斜线加数字的形式,‘\1’表示引用第一对括号匹配到的值,‘\n’
表示引用第n对括号匹配到的值,括号的编号方式是以‘(’ 左括号的顺序编号。
eg:expression=(\w)\1{1,} string=dafaaefdhffakkkjehf,匹配结果为‘aa’,‘ff’,‘kkk’
3. 预搜索
预搜索类似于边界限定符,其自身不匹配任何字符,作用就是界定在对应的方向上是否满足表达是限定的特征。
正向预搜索格式 (?=expression) ,(?!expression)
反向预搜索格式 (?<=expression), (?<!expression)
eg: expression=(\w)*(?=ee) string=abcdeecdfg 匹配 abcd
expression=(?<=ee)(\w)* string=abcdeecdfg 匹配 cdfg
正则表达式 (regular expression):是用一个字符串来描述一个特征,然后用来去验证另一个字符串是否符合这个特征。
其作用主要用来1.验证字符串是否满足指定的特征;2.从一段文本中查找一定特征的片段;3.替换指定特征的字符串。
二. 规则
1.普通字符串匹配自身
字母、数字、汉字、下划线以及没有特殊规定的标点符号这些都是普通字符串,普通字符串匹配一个与之相同的字符。
eg: expression='a' ,string='same' 匹配成功,匹配到字符‘a’ 位置[1,2);(0 为第一个编号,'[' 表示包含,‘)’ 表示不包含 下同)。
2.转义字符
使用‘\’前缀转义特殊字符
\r 匹配回车、\n 匹配换行、 \t 匹配制表符、\\ 匹配‘\’自身
\^ 匹配‘^’ 符号、\$ 匹配‘$’ 符号、\. 匹配‘.’ 符号
3. 多种字符匹配
多种字符匹配这里是指,一个表达式可以匹配多种字符中的一个。
3.1 约定的表达式
\d 匹配任意一个数字,\D 匹配任意一个非数字字符
\w 匹配任意一个字母、数字或下划线,\W 匹配任意一个非字母、非数字、非下划线的字符
\s 匹配任意一个空白字符(空格、制表...),\S 匹配任意非空白字符
. 点号匹配除了换行符之外的任意一个字符
3.2 自实现的多种字符匹配表达式
使用方括号[...] 能够匹配方括号中的任意一个字符,使用[^...] 可以匹配出方括号中之外的任意一个字符。
eg: [abc$2] 匹配 ‘a’、‘b’、‘c’、‘$’、或者'2',[^abc$2] 匹配除了‘a’、‘b’、‘c’、‘$’和‘2’ 之外的任意字符。
方括号中可以使用‘-’横线标识范围
eg: [a-c] == [abc]
4. 匹配次数
{n} 匹配重复n次,eg:a{2} 匹配 ‘aa’
{m,n} 匹配重复至少m次最多n次,eg:a{2,4} 匹配 ‘aa’、‘aaa’、‘aaaa’
{m,} 匹配至少重复m次, eg: a{3,} 匹配 ‘aaa’、‘aaaa’、‘a...’
? 匹配 0次或1次 等价于 {0,1}
+ 匹配至少出现1次 等价于 {1,}
* 匹配任意次 等价于 {0,}
5. 特殊符号
5.1 定界符
匹配边界的特殊符号
^ 限定起始边界,eg:^a 匹配 ‘abc’ 中的‘a’,但不匹配‘bac’ 中的‘a’
$ 限定结束边界,eg:a$ 匹配 ‘cba’ 中的‘a’,但不匹配‘bac’ 中的‘a’
\b 限定一个单词的边界(单词与空格之间),eg:a\b 匹配‘ abc’ 中的‘a’,\ba 匹配‘cba ’中的‘a’
5.2 表达是关系符号
| ‘或’ 关系,匹配左右两边其中一个表达式
() 括号之内的表达式被看做一个整体,被次数表达是修饰是匹配整体的重复次数,eg:(abc){2} 匹配 abcabc
三. 高级规则
1. 次数匹配中的‘贪婪’与‘非贪婪’
‘贪婪’是在与匹配重复次数不定的表达式进行配置中,总是尽可能多的匹配。
eg:expression= d\w+ string=daadaad 匹配结果是 ‘daadaad’
‘非贪婪’是在与匹配重复次数不定的表达式进行配置中,总是尽可能少的匹配。
eg:expression= d\w+? string=daadaad 匹配结果是 ‘da’,'da'
总结:‘贪婪’和‘非贪婪’ 取决于是否限定做大的匹配次数,即{m,n}中的n
2. 反向引用
在匹配过程中可以使用小括号‘()’中的表达式匹配到的字符。在匹配的过程中表达式的后边部分通过反向引用使用之前小括号表达式匹配到的字符。方式是‘\1’斜线加数字的形式,‘\1’表示引用第一对括号匹配到的值,‘\n’
表示引用第n对括号匹配到的值,括号的编号方式是以‘(’ 左括号的顺序编号。
eg:expression=(\w)\1{1,} string=dafaaefdhffakkkjehf,匹配结果为‘aa’,‘ff’,‘kkk’
3. 预搜索
预搜索类似于边界限定符,其自身不匹配任何字符,作用就是界定在对应的方向上是否满足表达是限定的特征。
正向预搜索格式 (?=expression) ,(?!expression)
反向预搜索格式 (?<=expression), (?<!expression)
eg: expression=(\w)*(?=ee) string=abcdeecdfg 匹配 abcd
expression=(?<=ee)(\w)* string=abcdeecdfg 匹配 cdfg