正则表达式(基础用法)

正则表达式regular expression (RE)

1、正则表达式应用场景,注意事项

1.1应用场景:
    匹配有规律的东西,手机号,身份证号,匹配日志。
    使用一些符号表达重复出现,大小写,开头,结尾含义。
    多用于Linux grep sed awk,开发语言python
1.2正则的注意事项:
    所有的符号都是英文符号
    学习是通过grep命令学习,grep加上单引号
    注意系统的字符集en_Us.UTF-8
    快速掌握正则需要配合grep -o参数

2、正则表达式的符号:

分类
基础正则^ $ ^$ . * .* [a-z] [^abc]
扩展正则* | () {} ?

3、正则VS通配符:

分类用途
正则grep,sed,awk,高级语言,进行过滤匹配字符
通配符(pathname extension)匹配文件(文件名)

3、正则表达式的符号及使用:

符号含义
^以……开头的行
$以……结尾的行
^$空行
.(点)任意一个字符
\ 转义字符脱掉马甲打回原形,除去原有的特殊含义
*前一个字符连续出现0次或0次以上
.*所有内容,任意内容,任何内容
[a-z][0-9] [abc]1次匹配其中的1个字符(或的关系),匹配任何一个字符
[^abc]取反,排除,排除a或b或c的内容,匹配a或b或c之外的内容。
+前一个字符连续出现了一个或一次以上
|表示或者
()被括起来的内容,表示一个整体(一个字符),后面应用(反向引用sed)
{n,m}连续出现 {n,m} 前一个字母至少出现n次,最多出现m次。可以省略n或者m
?前一个字符出现了0次或1次

注:正则特色:正则表达式的贪婪行,.表示所有或连续出现的时候,表现出尽可能贪婪匹配

--> cat 1.txt
I am oldboy teacher!
I teach linux.

I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448

not 49000000448
my god, I am not oldboy, but OLDBOY!

1) ^:以……开头的行
--> grep '^my' 1.txt
my blog isttp://oldboy.blog.$1cto.com
my qq is 49000448
my god, I am not oldboy, but OLDBOY!

2) $:以……结尾的行
--> grep '448$' 1.txt
my qq is 49000448
not 49000000448
//显示文件结尾的隐藏字符  -A
--> cat -A 1.txt  
I am oldboy teacher!$
I teach linux.$
$
I like bedminton ball, billiard ball and chinese chess!$
my blog isttp://oldboy.blog.$1cto.com $
our size is http://blog.oldboyedu.com $
my qq is 49000448$
$
not 49000000448$
my god, I am not oldboy, but OLDBOY!$
--> grep 'm$' 1.txt //m后面有个空格
--> grep 'm $' 1.txt
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 

3)^$ 空行
//这一行中什么内容都没有,空格也是符号,不算空行
--> grep -n '^$' 1.txt
3:
8:
//应用案例:排除文件中的空行
//-v 反向查找。
--> grep -v '^$' 1.txt
I am oldboy teacher!
I teach linux.
I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my qq is 49000448
not 49000000448
my god, I am not oldboy, but OLDBOY!

4) .() 任意一个字符
//点不匹配空行。
--> grep '.$' 1.txt
I am oldboy teacher!
I teach linux.
I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my qq is 49000448
not 49000000448
my god, I am not oldboy, but OLDBOY!

5) \ 转义字符:脱掉马甲打回原形,除去原有的特殊含义
//匹配文件以点结尾的行
--> grep  '\.$' 1.txt
I teach linux.
转义字符序列
	\n 回车换行
	\t tab键
	

6)*前一个字符连续出现0次或0次以上
	连续出现 0 00 000 oldboy(小写字母出现6次)
	刚开始单独使用,熟练掌握后再看*
--> grep '0*' 1.txt
I am oldboy teacher!
I teach linux.

I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my qq is 49000448

not 49000000448
my god, I am not oldboy, but OLDBOY!

7).* 所有内容,任意内容,任何内容
	整体记忆.*表示所有
-->grep '^.*t' 1.txt
I am oldboy teacher!
I teach linux.
I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
not 49000000448
my god, I am not oldboy, but OLDBOY!
//正则特色:正则表达式的贪婪行,.*表示所有或*连续出现的时候,表现出尽可能贪婪匹配。

//2*,表示数字2出现了0次,或者0次以上,出现0次相当于是什么都没有 也就等于grep '' 1.txt

8[a-z][0-9] [abc] 1次匹配1个字符,匹配任何一个字符
 --> grep '[abc]' 1.txt
I am oldboy teacher!
I teach linux.
I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my god, I am not oldboy, but OLDBOY!
--> grep '[a-zA-Z0-9]' 1.txt
中括号中的符号表示符号,没有特殊含义
-->  grep '[a-zA-Z0-9/]' 1.txt  
I am oldboy teacher!
I teach linux.
I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my qq is 49000448
not 49000000448
my god, I am not oldboy, but OLDBOY!

9[^abc] 取反,排除,排除a或b或c的内容,匹配a或b或c之外的内容。
扩展正则
10)+前一个字符连续出现了一个或一次以上
--> grep -E '0+' 1.txt  == --> egrep '0+' 1.txt
my qq is 49000448
not 49000000448
匹配出文件中连续的数字
--> egrep '[0-9]+' 1.txt
my blog isttp://oldboy.blog.$1cto.com 
my qq is 49000448
not 49000000448
-o 显示匹配过程
egrep -o '[0-9]+' 1.txt  
1
49000448
49000000448

11| 表示或者
--> egrep  'oldboy|oldbey' 1.txt
I am oldboy teacher!
my blog isttp://oldbey.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my god, I am not oldboy, but OLDBOY!

[]一次只能匹配一个字符,|可以是字符串
12) ()被括起来的内容,表示一个整体(一个字符),后面应用(反向引用sed)
--> egrep  'oldboy|oldbey' 1.txt
--> egrep  'oldb[oe]y' 1.txt
--> egrep  'oldb(o|e)y' 1.txt

13{} 连续出现 o{n,m} 前一个字母至少出现n次,最多出现m次。
--> egrep '0{1,3}' 1.txt
my qq is 49000448
not 49000000448
--> egrep '0{4,5}' 1.txt
not 49000000448
--> egrep '0{3}' 1.txt
my qq is 49000448
not 49000000448
--> egrep '0{,3}' 1.txt
my qq is 49000448
not 49000000448
--> egrep '0{3,}' 1.txt
my qq is 49000448
not 49000000448

14)?前一个字符出现了0次或1次
 --> egrep 'I?' 1.txt
I am oldboy teacher!
I teach linux.

I like bedminton ball, billiard ball and chinese chess!
my blog isttp://oldboy.blog.$1cto.com 
our size is http://blog.oldboyedu.com 
my qq is 49000448

not 49000000448
my god, I am not oldboy, but OLDBOY
--> egrep -on 'I?' 1.txt
1:I
2:I
4:I
10:I

总结

主要掌握正则表达式的符号与使用方法.

符号含义
^以……开头的行
$以……结尾的行
^$空行
.(点)任意一个字符
\ 转义字符脱掉马甲打回原形,除去原有的特殊含义
*前一个字符连续出现0次或0次以上
.*所有内容,任意内容,任何内容
[a-z][0-9] [abc]1次匹配其中的1个字符(或的关系),匹配任何一个字符
[^abc]取反,排除,排除a或b或c的内容,匹配a或b或c之外的内容。
+前一个字符连续出现了一个或一次以上
|表示或者
()被括起来的内容,表示一个整体(一个字符),后面应用(反向引用sed)
{n,m}连续出现 {n,m} 前一个字母至少出现n次,最多出现m次。可以省略n或者m
?前一个字符出现了0次或1次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值