正则表达式

简介: 正则表达式

正则表达式

一、正则表达式的元字符

image.png

image.png

[root@localhost ~]#ls /etc/ | grep rc[.0-6]  
grep命令使用正则表达式rc[.0-6]来匹配文件名中包含rc加数字(0-6)的文件或目录名,
其中方括号[]表示字符集,[.0-6]表示匹配.和0-6这些字符中的任意一个。
#此处的点代表字符
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[root@localhost ~]# ls /etc/ | grep 'rc\.' #只匹配已rc.开头的文件
#\为转义符,此处的.只表示.,不表示任意字符
rc.d
rc.local
[root@localhost ~]# ls /opt | grep "t."  #过滤出仅包含字母"t"后跟任何其他字符的行。
[root@localhost ~]# grep 'r..t' /etc/passwd         
#r..t ..代表任意两个字符    
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
[root@localhost ~]# echo abc |grep a.c              
#表示原来的点需要加\转义
abc
[root@localhost ~]# echo abc |grep a\.c
#使用grep正则表达式时不加引号有时匹配会有出入
abc
[root@localhost ~]# echo abc |grep 'a\.c'          
#标准格式需要加'' 或者""
[root@localhost ~]# ls |grep '[fhtx].txt'    
#匹配[]中任意一个字符
f.txt
h.txt
t.txt
x.txt
[root@localhost ~]# ls [a-d].txt                
#通配符
a.txt  A.txt  b.txt  B.txt  c.txt  C.txt  d.txt
[root@localhost ~]# ls | grep '[a-d].txt'             
#真正的小写在正则表达式中
a.txt
b.txt
c.txt
d.txt
[root@localhost ~]# ls |grep '[^a-z].txt'   
#显示非小写字母
A.txt
B.txt
[root@localhost ~]# ls |grep '[^a.z].txt'     
#“[^a.z]”表示不匹配字母“a”或“z”的任何字符(取反)
space空格
[root@localhost ~]# grep [[:space:]] 123.txt 
hhh  
jj    l
kkk 
[a-zA-Z] #表示同时匹配大小写

二、表示次数

image.png

2.1 *: 匹配前面的字符任意次,包括0次

[root@localhost ~]# echo  ac |grep 'ab*c'  #ab之间不输入b可匹配
ac
[root@localhost ~]# echo  abc |grep 'ab*c' #ab之间输入1个b可匹配
abc
[root@localhost ~]# echo  abbc |grep 'ab*c'#ab之间输入2个b可匹配
abbc

2.2 .* : 任意长度的任意字符,不包括0次,也就是匹配所有

[root@localhost ~]# echo ac |grep 'ab.*c'  #ac之间不输入b匹配不到
[root@localhost ~]# echo abc |grep 'ab.*c' #ac之间输入1个b可以匹配
abc
[root@localhost ~]# echo abbc |grep 'ab.*c' #ac直接输入2个b可以匹配
abbc

2.3 ?: 匹配其前面的字符出现0次或1次,即:可有可无

[root@localhost ~]# echo ac | grep 'ab\?c'    #ac之间不输入b可以匹配
ac
[root@localhost ~]# echo abc | grep 'ab\?c'   #ac之间输入1个b可以匹配
abc
[root@localhost ~]# echo abbc | grep 'ab\?c'  #ac之间输入2个b匹配不到 

2.4 \+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次

[root@localhost ~]# echo ac | grep 'ab\+c'  #ac之间不输入b匹配不到
[root@localhost ~]# echo abc | grep 'ab\+c' #ac之间输入1个b可以匹配
abc
[root@localhost ~]# echo abbbbc | grep 'ab\+c' #ac之间输入多个b可以匹配
abbbbc

2.5 \{n} #匹配前面的字符=n次

[root@localhost ~]# echo abbbc |grep 'ab\{3\}c'  #输出abbbc匹配ac之间b字符出现3次可以匹配
abbbc
[root@localhost ~]# echo abbbbc |grep 'ab\{3\}c' #输出abbbbc匹配ac之间b字符出现3次匹配不到

2.6 \{m,n\} #匹配前面的字符至少m次,至多n次

[root@localhost ~]# echo abc |grep 'ab\{1,3\}c'  #输出abc匹配ac之间b出现最少1次最多3次可以匹配
abc
[root@localhost ~]# echo abbc |grep 'ab\{1,3\}c' #输出abbc匹配ac之间b出现最少1次最多3次可以匹配
abbc
[root@localhost ~]# echo abbbc |grep 'ab\{1,3\}c'#输出abbbc匹配ac之间b出现最少1次最多3次可以匹配
abbbc
[root@localhost ~]# echo abbbbc |grep 'ab\{1,3\}c'#输出abbbbc匹配ac之间b出现最少1次最多3次匹配不到

2.7 \{,n\} #匹配前面的字符至多n次,<=n

2.8 \{n,\} #匹配前面的字符至少n次

三、位置锚定

image.png

[root@localhost ~]# cat a.txt                #查看a.txt内容 
root
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep '^a'     #查看a.txt内容过滤以a开头的行
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep 'e$'     #查看a.txt内容过滤以e为结尾的行
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep '^root$' #查看a.txt内容过滤只有root字符的行
root
[root@localhost ~]# cat a.txt |grep '\ba'    #查看a.txt过滤以a开头的词
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep 'e\b'    #查看a.txt过滤以e为结尾的词
abc   abd  abf abe 
asfase
asdfasfewe
[root@localhost ~]# cat a.txt |grep -o '\babc\b' #查看a.txt过滤次abc
abc 

四、分组

()将多个字符捆绑在一起当做一个整体处理

[root@localhost ~]# echo abcccc |grep "abc\{4\}"  #匹配输出内容c出现4次
abcccc
[root@localhost ~]# echo abcccc |grep "\(abc\)\{4\}" #abc字符加()分组匹配输出内容abc出现4次,无abc出现4次匹配不到
[root@localhost ~]# echo abcabcabcabc |grep "\(abc\)\{4\}"  #abc字符加()分组匹配输出内容abc出现4次匹配成功
abcabcabcabc

五、扩展正则表达式

grep -E   或 sed -r    或 egrep

image.png

将test.txt中的内容用扩展正则表达式输出
[root@localhost ~]# cat test.txt
987-123-4567
987 456-1230
(123) 456-7890
[root@localhost ~]# cat test.txt | grep -E "(\([0-9]+\)|[0-9]+)[ -]?[0-9]+[ -]?[0-9]+"
目录
相关文章
|
2月前
|
测试技术 数据安全/隐私保护 C++
正则表达式
正则表达式
25 0
|
4月前
正则表达式的使用
正则表达式的使用
17 1
|
JavaScript 前端开发 Java
|
机器学习/深度学习 C++ Windows
|
数据采集 机器学习/深度学习 移动开发
我学会了,正则表达式
爬虫是**非常的**的强大,相信不少朋友都有所耳闻,它帮助我们更快地“获得”我们所要关键数据。那么,它怎么知道我们要需要什么内容?它又是如何工作的?在这篇文章里,我们一起来看看。
76 0
我学会了,正则表达式
正则表达式(全)
正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换符合规则的字符串。在表单验证、Url映射等处都会经常用到。
161 0
|
数据安全/隐私保护
常用的正则表达式
常用的正则表达式
常用正则表达式
邮箱 gaozihang-001@gmail.com 只允许英文字母、数字、下划线、英文句号、以及中划线组成 ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$ 高子航001Abc@bowbee.
1438 0
|
机器学习/深度学习 Windows JavaScript
详细的正则表达式
只能输入数字:"^[0-9]*$"。只能输入n位的数字:"^\d{n}$"。只能输入至少n位的数字:"^\d{n,}$"。只能输入m~n位的数字:。"^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
852 0