正则表达式(Regular Expression)是一种文本模式,包括普通字符(如字母、数字等)和特殊字符(称为"元字符",例如*.avi中的*)。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,从而起到搜索、替换所需要的文本或文件名的功能。
以下元字符不以“\”开头,要匹配其原义,去掉“\”即可。
以下除了空格,均为元字符:
字符 | 描述 |
---|---|
\n | 换行符 |
\r | 回车符 |
\f | 换页符 |
\t | 水平制表符 |
\v | 垂直制表符 |
前者匹配一个数字字符。等价于:
[0-9]
后者与前者相反,匹配一个非数字字符。
前者匹配一个空白字符,等价于:
[ \f\n\r\t\v]
后者与前者相反,匹配一个非空白字符。
前者匹配一个字母、数字或下划线,等价于
[A-Za-z0-9_]
后者与前者相反。
以下元字符,要匹配其原义,需要使用“\”转义。
以下六种元字符可指定匹配字符的次数。
n为非负整数,表示匹配括号前一个字符n次,例如匹配字符a三次:
a{3}
n为非负整数,表示匹配括号前一个字符至少n次。
表示匹配括号前一个字符n到m次。
匹配其前面的单个字符零次或多次,例如以下表达式可匹配“acd”、“abcd”、“abbcd”、“abbbbcd”等。
ab*cd
匹配其前面的单个字符一次或多次。以下表达式可匹配“abcd”、“abbcd”、“abbbbcd”等。
ab+cd
匹配其前面的单个字符零次或一次。以下表达式可匹配“acd”、“abcd”等。
ab?cd
该字符后面接字符串,表示匹配以该字符串开头的内容,例如:
^abc
则可以匹配到以“abc”开头的文本。
若在方括号中使用“^”,其含义为“取反”,即对于配所有该方括号中出现的内容均不匹配,例如,匹配除元音字母外的所有字符:
[^aeiou]
该字符前面接字符串,表示匹配以该字符串结尾的内容,例如,匹配所有以“abc”结尾的字符串:
abc$
该字符可与“^”连用,表示精确匹配,例如:
^123$
则只能匹配到内容为“123”的文本。
被方括号括住的内容为字符簇,用于匹配一个该方括号中出现的字符。例如,匹配所有元音字母:
[aeiou]
可使用“-”表示一个范围内的字符都进行匹配。例如,匹配一个数字:
[0-9]
注意顺序,0在前9在后,写反了就啥也匹配不到。
“-”不是元字符,除了在方括号中的这种特殊用法,“-”与其他普通字符使用方法一致。
匹配除换行符(\n及\r)之外的单个字符。相当于:
[^\n\r]
括号内的内容可作为子正则表达式,与其他正则表达式构成完整匹配规则。
表示选择,匹配“|”前面的字符串或后面的字符串,例如:
N|CBA
(N|C)BA
前者可匹配“N”和“CBA”,后者匹配“NBA”和“CBA”。
元字符一般从左到右运算,优先级由高到底,如下表所示:
元字符 | 描述 |
---|---|
\ | 转义符 |
[], () | 中括号和小括号 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, .等 | 定位符和其他元字符 |
| | 选择符号 |
修饰符并不是正则表达式的一部分,这些字符一般跟在正则表达式后面,以起到一些额外的作用:
修饰符部分以“/”作为开始,后面接修饰符:
修饰符 | 功能 |
---|---|
i | 不区分大小写 |
g | 全局匹配 |
m | 多行匹配 |
s | 令元字符“.”也能匹配到“\n” |