正则表达式
正则表达式是字符串处理的有力工具和技术,正则表达式使用预定义的特定模式去匹配一类具有相同特征的字符串,主要用于字符串处理,可以快速准确的完成复杂的查找,替换等处理要求。
1.正则表达式的作用
在程序设计过程中,用户会不可避免的遇到处理某些文本的情况。有的时候,用户还需要查找符合某些比较复杂的规则的字符串,或者是某些判断语句过程中会判断一个字符串是不是全数字,字母之类的情况,这时就可以通过正则表达式来简化我们的代码。
2.基本的正则表达式
基本正则表达式(basic regular expression),又称为标椎正则表达式,是最早指定的正则表达式规范。仅仅支持最基本的元字符集。
正则表达式字符表
字符 | 含义 |
---|---|
^ | 从每一行的开始进行匹配 (匹配开头) |
$ | 从每一行的某位进行匹配 (匹配末尾) |
> 或 \B | 在字的末尾进行匹配 |
< 或 \b | 在字的开始进行匹配 |
. | 对任意单个字符进行匹配 |
[str] | 对中括号中的任何单个字符进行匹配 |
[^str] | 对任何不在中括号中的单个字符进行匹配 |
a-b | 对a到b之间的任何字符进行匹配 |
\ | 转义字符,保持特殊字符的本身的意义 |
* | 对前一项进行0次或多次重复匹配 |
3.简单的正则表达式的案例
- (1)^word 表示搜索以word开头的内容
[root@bogon ~]# cat /etc/passwd | grep ^root
root:x:0:0:root:/root:/bin/bash
- (2) word$ 表示搜索以word结尾的内容
[root@bogon ~]# cat /etc/passwd | grep bash$
root:x:0:0:root:/root:/bin/bash
- (3) ^$ 表示空行
[root@bogon ~]# cat /etc/fstab | grep ^$
[root@bogon ~]#
- (4) . 表示单一的任意字符
[root@bogon ~]# cat /etc/passwd | grep ro.t
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
- (5)* 表示匹配 * 前0个或多个字符
[root@bogon ~]# cat /etc/passwd | grep no*
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
- (6) .* 匹配所有的字符
[root@bogon ~]# cat /etc/passwd | grep ^.*
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
- (7) [] 匹配中括号里的字符
[root@bogon ~]# cat /etc/passwd | grep [ve]
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:997:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
cockpit-ws:x:996:993:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:995:992:User for cockpit-ws instances:/nonexisting:/sbin/nologin
sssd:x:994:990:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:993:989::/var/lib/chrony:/sbin/nologin
rngd:x:992:988:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
nginx:x:991:987:Nginx web server:/var/lib/nginx:/sbin/nologin
- (8) [^string] 代表除了[]内的任意字符
[^abc] 表示匹配的内容不包含,a或b或c
- (9) {n,m} 匹配n到m次,前一个字符
{n,}匹配至少n次,多了不限
{n}匹配n次
{,m}最多匹配m次,少了不限
注: grep 在使用{}时,需要转义
[root@bogon ~]# cat /etc/passwd | egrep ro{2}t
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
4.扩展正则表达式
扩展正则表达式(extend regular expression),它在正则表达式的基础上功能做出强化,支持更多的元字符。
扩展正则表达式的元字符表
+ | 对前一项进行1次或多次匹配 |
---|---|
? | 对前一项进行0次或1次匹配 |
{j} | 对前一项进行j次匹配 |
{j,} | 对前一项进行至少j次匹配,多了不限制 |
{,k} | 对前一项进行至多k次匹配,少了不限制 |
q | p |
() | 将括号里面的内容看作是一个整体 |