正则表达式
描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子字符串、将匹配的子字符串替换或者从某个字符串中取出符合某个条件的子字符串等。
① 原子:表示匹配的具体内容,可以用普通字符串或者通用字符串作为原子;
② 元字符:不能单独使用,用来修饰原子,表示匹配方式和规则。
普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
[ABC] 匹配 [...] 中的所有字符。
[^ABC] 匹配除了 [...] 中字符的所有字符。
[A-Z] [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
[\s\S] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
[0-9] 匹配一个0-9之间的数字。
非打印字符(转义序列)
\n 匹配一个换行符。
\r 匹配一个回车符。
\w 匹配任意字母、数字、下划线,等价于 [A-Za-z0-9_]。
\W 和小写w相反,匹配任意字母、数字、下划线以外的字符。
\d 匹配数字。
\D 匹配除了十进制数以外的值。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。
\S 匹配任何非空白字符。
\t 匹配一个制表符。
特殊字符
^ 匹配输入字符串的开始位置,当该符号在中括号表达式中使用时,表示不匹配该方括号表达式中的字符集合。
$ 匹配输入字符串的结尾位置。
. 匹配除换行符 \n 之外的任何单字符。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。
[ 标记一个中括号表达式的开始,范围表达式,普通字符在中括号内表示其本身。
{ 标记限定符表达式的开始。
| 指明两项之间的一个选择。
限定符
用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配,共六种。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
{n} n 是一个非负整数。匹配确定的 n 次。
{n,} n 是一个非负整数。至少匹配n 次。
{n,m} m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。
注意:限定符出现在范围表达式之后;* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
定位符
^ 和 $ 分别指字符串的开始与结束
\b 描述单词的前或后边界(即单词与空格间的位置)
\B 表示非单词边界。
注意:不能将限定符与定位符一起使用。