正则表达式
一、正则表达式的意义
正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。
二、元字符
元字符 | 描述 |
. | 描述任意一个除换行符的字符 |
[] | 匹配方括号内的任意字符 |
[^] | 匹配除了方括号内的任意字符 |
* | 匹配0个及以上的字符 |
+ | 匹配1个及以上的字符 |
? | 标记?前的字符只能有1个或0个 |
{n,m} | 匹配n到m个字符,其中n(m)可以省略, 即{n,}({,m}),代表大于n个字符(小于m个字符) |
(xyz) | 匹配和括号内(xyz)完全相同的字符串 |
| | 或运算符 |
\ | 转义字符,匹配一些保留的字符(如上的元字符) |
^ | 代表从开始行进行匹配 |
$ | 代表从末端进行匹配 |
2.1 点运算符 .
描述任意一个除换行符的字符
“.at” => a cat in a car.
“ca.” => a cat in a car.
2.2字符集
2.2.1 字符集 []
匹配方括号内的任意字符
“[Tt]” => The cat in the car.
2.2.2否定字符集[^]
匹配除了方括号内的任意字符
“[cat]” => a cat in a car.
2.3重复次数
2.3.1 *
匹配0个及以上的字符
“ab*c” => abbbbc ac abc adc
2.3.2 +
匹配1个及以上的字符
“ab+c” => abbbbc ac abc adc
2.3.3 ?
标记?前的字符只能有1个或0个
“ab?c” => abbbbc ac abc adc
2.4 {}
匹配n到m个字符,其中n(m)可以省略,
即{n,}({,m}),代表大于n个字符(小于m个字符)
“ab{1,3}c” => abbbc ac abc adc abbbbc
“ab{1,}c” => abbbc ac abc adc abbbbc
“ab{,3}c” => abbbc ac abc adc abbbbc
2.5 (...)
特征标群
特征标群是一组写在 (...) 中的子模式。(...) 中包含的内容将会被看成一个整体,和数学中小括号( )的作用相同。例如, 表达式 (ab)* 匹配连续出现 0 或更多个 ab。如果没有使用 (...) ,那么表达式 ab* 将匹配连续出现 0 或更多个 b 。再比如之前说的 {} 是用来表示前面一个字符出现指定次数。但如果在 {} 前加上特征标群 (...) 则表示整个标群内的字符重复 N 次。
“(aA)+c” => aAc aAaAc aAaac
2.6 |或运算符
判断符
“(T/t)he” => The cat in the car.
2.7 转码特殊字符
反斜线 \
在表达式中用于转码紧跟其后的字符。用于指定 { } [ ] / \ + * . $ ^ | ?
这些特殊字符。如果想要匹配这些特殊字符则要在其前面加上反斜线 \
。
“car\.” => The cat in the car.
2.8锚点
2.8.1^
^
用来检查匹配的字符串是否在所匹配字符串的开头。
“^[Tt]he” => The cat in the car.
“[Tt]he” => The cat in the car.
2.8.2$
同理于 ^
号,$
号用来匹配字符是否是最后一个。
“ca(t|r)” =>The cat in the car
“ca(t|r)$” => The cat in the car
三、简写字符集
简写 | 描述 |
. | 除换行符外的所有字符 |
\w | 匹配所有字母数字,相当于[a-zA-z0-9] |
\W | 匹配所有非字母数字,相当于[^\w] |
\d | 匹配所有数字,即[0-9] |
\D | 匹配所有非数字,即[\d] |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\f | 匹配一个换页符 |
\v | 匹配一个垂直制表符 |
\p | 匹配 CR/LF(等同于 |
3.1 \w
匹配所有字母数字,相当于[a-zA-z0-9]
“\w” => A1 b2 # 3
3.2 \W
匹配所有非字母数字,相当于[^\w]
“\W” => A1 b2 # 3
3.3 \d
匹配所有数字,即[0-9]
“\d” => A1 b2 # 3
3.4 \D
匹配所有非数字,即[\d]
“\D” => A1 b2 # 3
四、贪婪匹配和惰性匹配
正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ?
将贪婪匹配模式转化为惰性匹配模式。
“<.+>” => <span><b>This is a sample text</b></span>
(贪婪匹配)
“<.+?>” => <span><b>This is a sample text</b></span>
(懒惰匹配)