正则表达式
正则表达式:匹配字符串内容的一种规则
-
字符组 : [字符组]
在同一个位置可能出现的各种字符组成的字符组,在正则表达式中用
[]
表示。[0-9]
:表示匹配0到9中的任意一个数字[A-Z]
:匹配任意一个大写字母[A-Za-z0-9]
:匹配一个数字或字母
-
字符
元字符 匹配内容 . 匹配除换行符以外的任意字符 \w
匹配字母或数字或下划线 (word) \s
匹配任意的空白符 (space) \d
匹配数字 (digit) \n
匹配一个换行符 \t
匹配一个制表符 \b
匹配一个单词的结尾 o\b
可以匹配到hello单词的末尾字母’o’^
匹配字符串的开始 $
匹配字符串的结尾 \W
匹配非字母或数字或下划线 \D
匹配非数 \S
匹配非空白 a|b
匹配字符串a或字符串b,从左到右匹配,只要匹配上就不再匹配了,如 ab|abc
,当字符串中有abc
时,由于匹配到了ab
,所以不再往后匹配字母c
了,所以一般把长的字符串放在前面()
匹配括号内的表达式,也表示一个组 [...]
匹配字符组中的字符 [^...]
匹配除了字符组中字符的所有字符 -
量词
量词 说明 * 重复零次或多次 + 重复一次或多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或以上 {n,m} 重复n到m次 量词只约束紧跟者他的前一个元字符。
正则 | 待匹配字符 | 匹配结果 | 说明 |
---|---|---|---|
x.? | xabx123x9876x | xa x1 x9 x | ?表示重复零次或一次,即只匹配"李"后面任意一个或零个字符(尽可能多的匹配) |
x.* | xabx123x9876 | xabx123x9876 | *表示重复零次或多次,即匹配"李"后面0或多个任意字符(尽可能多的匹配) |
x.+ | xabx123x9876 | xabx123x9876 | +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符(尽可能多的匹配) |
x.{1,2} | xabx123x9876 | xab x12 x98 | {1,2}匹配1到2次任意字符(尽可能多的匹配,也就是尽可能匹配2个字符) |
如果在后面加上问号?
,就会尽可能少的匹配
正则 | 待匹配字符 | 匹配结果 | 说明 |
---|---|---|---|
x.?? | xabx123x9876 | x x x x | 第一个?表示重复零次或一次,即只匹配"李"后面任意一个或零个字符,第二个问号表示匹配0个字符 |
x.*? | xabx123x9876 | x x x | *表示重复零次或多次,即匹配"李"后面0或多个任意字符,加问号后只匹配0个字符 |
x.+? | xabx123x9876 | xa x1 x9 | +表示重复一次或多次,即只匹配"李"后面1个或多个任意字符,加问号后只匹配1个字符 |
x.{1,2}? | xabx123x9876 | xa x1 x9 | {1,2}匹配1到2次任意字符,加问号后只匹配1个字符 |
-
转义符
/
正则 待匹配字符 匹配 结果 说明 //n
/n
True 因为在正则表达式中/是有特殊意义的字符,所以要匹配/n本身,用表达式/n无法匹配,需要再加上一个/ -
贪婪匹配
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配,加
?
后就是非贪婪匹配正则 待匹配字符 匹配 结果 说明 x.*y abcxskfyabxcy xskfyabxcy 默认为贪婪匹配模式,会匹配尽量长的字符串 x.*?y abcxskfyabxcy xskfy
xcy非贪婪匹配模式,会匹配尽量短的字符串