正则表达式
基础正则表达式
- 正则表达式就是能用某种模式去匹配一类字符串的公式,它是由一串字符和元字符构成 的字符串。所谓元字符,就是用以阐述字符表达式的内容、转换和描述各种操作信息的字符。
- 正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为, 正则表示式 通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程 序。vim、grep、find、awk、sed等命令都支持正则表达式。
基础的正则表达式
1、“.”(一个点)符号
- 点符号用于匹配除换行符之外的任意一个字符。例如:r.t可以匹配rot、rut,但是不能匹 配root,如果使用r…t就可以匹配root、ruutr t(中间是两个空格)等
[root@sunday-test ~]# grep "r..t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
2、“*”符号
- “\”符号用于匹配前一个字符0次或任意多次,比如ab,可以匹配a、ab、abb 等
- “\”号经常和 “.” 符号加在一起使用。比如 “.”代表任意长度的不包含换行的字符。
[root@sunday-test ~]# grep "rr*t" /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
3、“{n,m}”符号
- 使用“{n,m}”符号可以灵活的控制字符的重复次数,典型的有以下3种形式:
- \\{n\\} 匹配前面的字符n次。
[root@wxl ~]# grep "ro\{2\}t" /etc/passwd
root:x:0:0:root:/root:/usr/bin/fish
operator:x:11:0:operator:/root:/sbin/nologin
You have new mail in /var/mail/roo
- \\{n,\\} 匹配前面的字符至少n次以上(含n次)
[root@wxl ~]# grep "ro\{2,\}t" /etc/passwd
root:x:0:0:root:/root:/usr/bin/fish
operator:x:11:0:operator:/root:/sbin/nologin
- \{n,m\\} 匹配前面的字符 n 到 m 次 。
4、"^"符号
- 用于匹配开头的字符
[root@sunday-test ~]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
5、“$”符号
- 用于匹配结尾的字符。
- “abc$”代表以abc结尾
- “^$” 代表空行
- 例:以r开头,中间有一串任意字符,以h结尾的行。
[root@wxl ~]# grep "^r.*h$" /etc/passwd
root:x:0:0:root:/root:/usr/bin/fish
6、“[]”符号
- 一对方括号,用于匹配方括号内出现的任一字符。
[ABCD] 就是A、B、C、D中的任意一个
[A-Z] 匹配任意一个大写字母
[A-Za-z] 匹配任意一个字母
[^A-Z] 代表不是大写字母 “^”符号在[]里面就是取反
7、\”符号 转义符号
- 对有特殊意思的符号进行转义,转义成普通字符。
[ -] 是错误的
[\ \-] 是对的 \对空格和-进行了转义
8、“<”符号和“>”符号
- 两个符号分别用于界定单词的左边界和右边界。
“\<hello” 用于匹配以“hello”开头的单词
“hello\>” 则用于匹配以“hello”结尾的单词
“\<\>” 用于精确匹配一个字符串。
“\<hello\>” 精确匹配单词hello,而不是helloworld等
以上8中元字符是最常见的,还有一些不太常用的字符,这些字符中有不少可以使用前面8 种基础的元字符来表示。
符号 | 作用 |
“\b” | 匹配单词的边界,比如“\bhello\b”可以精确匹配“hello”单词 |
“\B” | 匹配非单词的边界,比如hello\B可以匹配“helloworld”中的"hello"。 |
“\w” | 匹配字母、数字和下划线,等价于[A-Za-z0-9] |
“\W” | 匹配非字母、非数字、非下划线,等价于[^A-Za-z0-9] |
“\n” | 匹配一个换行符 |
“\r” | 匹配一个回车符 |
“\t” | 匹配一个制表符 |
“\f” | 匹配一个换页符 |
“\s” | 匹配任何空白字符 |
\S” | 匹配任何非空白字符 |