正则表达式(Regular Expression,regexp)是一种描述字符串特征的语法规则,用于验证各种字符串是否匹配这个特征,进而实现高级的文本查找,替换,截取内容等操作。
定位符
| 定位符 | 说明 | 
|---|---|
| ^ | 匹配字符串的开始 | 
| $ | 匹配字符串结尾的位置 | 
选折符
当要查找的条件有多个,只要其中一个满足即成立时,使用选择符”|”。
1 | grep -p --color 'Linux|UNIX' | 
字符范围
| 示例 | 说明 | 
|---|---|
| [abc] | 匹配字符a,b,c | 
| [^abc] | 匹配除a,b,c以外的字符 | 
| [a-z] | 匹配字母a-z范围内的字符 | 
1 | [^a-z] | 
2 | [a-zA-Z0-9] | 
点字符和限定符
点字符”.”用来匹配任意一个字符。
限定符(?,+,*,{})用于匹配某个字符出现的次数。
| 字符 | 说明 | 示例 | 
|---|---|---|
| . | 匹配一个任意字符 | s.t–>sat,set,sit | 
| ? | 匹配前面的字符零次或者一次 | colou?r–>color,colour | 
| + | 匹配前面的字符一次或者多次 | go+gle–>goole,gooooole | 
| * | 匹配前面的字符零次或者多次 | go*gle–>gogle,goooogle | 
| {n} | 匹配前面的字符n次 | go{2}gle–>google | 
| {n,} | 匹配前面的字符至少n次 | go{3,}gle–>gooogle,gooooooogle | 
| {n,m} | 匹配前面的字符至少n次,最多m次 | employe{0,2}–>employ,employe,employee | 
当点字符和限定符连用时,可以实现匹配指定数量的任意字符。
正则表达式支持贪婪匹配和惰性匹配两种,默认情况下是贪婪匹配。当要实现惰性匹配 ,在上一个限定符后面加上”?”符号。
| 匹配方式 | 示例 | 说明 | 
|---|---|---|
| 贪婪 | a.*b | 最先出现的a到最后出现的b–>a00b00babc | 
| 惰性 | a.*?b | 最先出现的a到最先出现的b–>a00b00babc | 
小括号
小括号的两个作用,一是改变作用范围,二是分组。
| 示例 | 说明 | 
|---|---|
| thir|fourth | thirthfourth | 
| (thir|four)th | thirth fourth | 
| app{2} | appppappapp | 
| (app){2} | appppappapp(分组后表示匹配2个app) | 
反斜杠
反斜杠”"有两个作用,一是作为转义字符,二是表示一些不可打印的字符,指定预定义字符集等。
| 字符 | 说明 | 
|---|---|
| \d | 任意一个十进制数字,相当于[0-9] | 
| \D | 任意一个非十进制的数字 | 
| \w | 任意一个单词字符,相当于[a-zA-z0-9] | 
| \W | 任意一个非单词字符 | 
| \s | 任意一个空白字符(空格,水平制表符) | 
| \S | 任意一个非空白字符 | 
| \b | 单词分界符,\bapple –> test apple | 
| \B | 非单词分界符,\Bple –> test apple | 
| \xhh | 表示hh(十六进制2位数字)对应的ASCII字符,如\x61是a | 
示例
只允许访问html,css,jpg扩展名
1 | ^.*?\.(html|css|jpg)$ | 
验证ip地址
1 | 0~99:    [1-9]?\d | 
2 | 100~199: 1\d{2} | 
3 | 200~255: 2([0-4]\d|5[0-5]) | 
4 | 0~255:   [1-9]?\d|1\d{2}|2([0-4]\d|5[0-5])  | 
5 | 0.0.0.0: ^(0\.){3}0$  -->  ^(()\.){3}()$ | 
6 | ip地址:   ^(([1-9]?\d|1\d{2}|2([0-4]\d|5[0-5]))\.){3}([1-9]?\d|1\d{2}|2([0-4]\d|5[0-5]))$ | 
验证日期格式
1 | 验证年份:  [1-9]\d{3} | 
2 | 验证月份:  [1-9]|1[0-2] | 
3 | 验证天数:  [1-9]|[1-2]\d|3[01] | 
4 | 完整正则表达式: ^[1-9]\d{3}-([1-9]|1[0-2])-([1-9]|[1-2]\d|3[01])$ |