不能以逗号结尾 正则表达式_全正则表达式学习记录

正则表达式:就是用某种模式去匹配一类字符串的公式,它是由一串字符和元字符构成的字符串,所谓元字符,就是用以阐述字符表达式的内容、转换和描述各种操作信息的字符。

基础正则表达式

1. " . "(一个点)符号

用于匹配除换行符以外的任意一个字符。示例:其中红色为匹配部分

07fe24f2db83db01a0e5b62df0363bfb.png
2. " * " 符号

用于匹配前一个字符0次或任意多次。示例:由于/etc/passwd中没有rt、rrt这样的匹配,所以该表达式只找出了包含t的行(r匹配了0次)。

11063601bf2bb02b5f8a4ca5dc47d660.png
3. “{n,m}” 符号

虽然"*“可以重复匹配前一个字符,但不能精确控制次数,使用”{n,m}" 则能灵活控制字符重复次数,典型的有以下3种形式:

  • {n} 匹配前面的字符n次
    示例:’ro{2}t’ 表示匹配以r开头后面接重复2次o再接t的字符 root 。
  • {n,} 匹配前面的字符至少n次以上(含n次),示例:
  • {n,m} 匹配前面的字符n到m次
4. “^” 符号

这个符号位于键盘数字6上面,又称尖角号。用于匹配开头的字符 。示例:“^root”表示匹配以root开头的行

0f32c8d734d4e3c5d1dfeb33808fb93b.png
5."$"符号

和上面的"^“号相对,”$"用于匹配尾部。示例:"abc$“表示以abc结尾的行,”^$“因为中间什么都没有,表示空行。下面”^r.*h$"表示以r开头,中间有一串任意字符,以h结尾的行。

06a0858ec31d10bbc52bae8635f8a136.png
6."[]"符号

这是一对方括号,用于匹配括号内出现的任一字符。比如说单项选择题答案可能是A,B,C,D一种,用正则表达式就是[ABCD]。如果遇到比较大的范围,比如说匹配任意一个大写字母,就要用"-“做范围限定,写成[A-Z],要匹配所有字母则写成[A-Za-z],注意,这里的”-“不是充当一个字符。数字则写成[0-9]。如果要匹配不是大写字母A,B,C,D,使用”^",这个符号出现在[]中代表取反,写成[^A-D]。

7.""符号

转义符号,上面提到"-“号在[]中有特别含义,举个例子,有个固定电话021-88888888,也可写成021 88888888区号和电话号码中间用空格隔开,一个是”-",一个是空格,那我们不能这么写:[-],为了表示其作为一个字符的本意,就要使用转义符"“了,那这里应该写成[ -]其实在这里这个表达式中总共写了4个”",但你只能看到2个,就是因为“”本身在这里就有特殊意义,如果只写两个,你就看不到它了本文中如果有些地方符号显示不正常,可能就是没有进行转义,怪我粗心了。很多地方很多符号都需要进行转义,就需要使用""进行转义。

6da7f8de2ad0d0bcb3c9102d0ef11cd5.png
8.""符号

这两个符号分别用于界定单词的左边界和右边界。如果两个组合在一起,能够精确匹配,如""可以精确匹配单词hello.示例:

7eddf0c4f44310ba999ec35f1f3ab6be.png

以上8种是常见的元字符,还有些不太常用的字符,这些字符中有不少可以使用之前的8种基础元字符来表示。以下只作简单示例

9."d"符号

匹配一个数字,等价于[0-9],使用grep匹配这种正则表达式时可能会有无法匹配的问题。

9287bc41c85fc1b111e4f270b1a8781e.png
10."b"符号和"B符号"

“b符号"匹配单词的边界,而”B"符号则刚好相反,匹配非单词边界。

6a23d43fb141ea82a5d099a21867b572.png
11."w"符号和"W"符号

"w"符号 匹配字母、数字和下划线,等价于[A-Za-z0-9]“W"符号与”w"相反,匹配非字母、非数字、非下划线,等价于[^A-Za-z0-9]。

4f72304d0e426b475e87084ed1f45533.png
12.""符号

匹配一个换行符。

13.""符号

匹配一个回车符。

14.""符号

匹配一个制表符。

15."f"符号

匹配一个换页符。

16."s"符号

匹配任何空白字符。

17."S"符号

匹配任何非空白字符。

扩展正则表达式

扩展正则表达式是针对基础正则表达式的一些补充,比基础正则表达式多了几个重要的符号,使用扩展符号时,需要使用egrep命令。

  1. "?"符号
    "?"符号用于匹配前一个字符0次或1次,所以’ro?t’仅能匹配rot或rt。
  2. "+"符号
    "+"符号用于匹配前一个字符1次以上,所以’ro+t’可以匹配rot,root等。
  3. "|"符号
    "|"是"或"的意思,即多种可能的罗列,彼此间是一种分支关系。
    比如有的地方固定电话的区号是3位数,有的却是4位数:
#区号是3位数^0[0-9]{2}-[0-9]{8}#区号是4位数^0[0-9]{3}-[0-9]{8}#两种区号^0[0-9]{2,3}-[0-9]{8}#也可以用"|"符号,但显然比上面这种更麻烦^0[0-9]{2}-[0-9]{8}|^0[0-9]{3}-[0-9]{8}
  1. "()"符号
    "()“符号通常需要和”|"符号联合使用,用于枚举一系列可替换的字符。
#使用"()"和"|"定义连接符的写法^0[0-9]{2,3}(-| )[0-9]{8}#这样021-88888888和0511 88888888都能匹配#这种写法也可以用[]替换^0[0-9]{2,3}[ -][0-9]{8}#虽然"()"和"|"可以和"[]"混用,但在某些场景下"()"和"|"可以做得更好

通配符

通配符是一种特殊的语句,主要包含"*“号和”?“号(还有”{}","^","!")。主要用来模糊搜索文件,使用它代替一个或多个真正的字符,尤其是在不确定完整的文件名的情况下,用来匹配符合条件的文件。

  1. "*"符号代表0个或多个字符,示例:
#显示当前目录所有以.doc为后缀名的文件ls -l *.doc 
  1. "?"符号,当它作为通配符使用时,代表任意一个字符:
#列出所有以A开头的两个字符名并以.doc为后缀的文件ls -l A?.doc
  1. "{}"符号可匹配所有括号内包含的以逗号隔开的字符。
#列出所有以字母A,B,C开头,以.doc结尾的文件ls -l {A,B,C}.doc#当然,使用"[]"也行ls -l [A-C].doc#但是如果要列出以字母AB,CD开头以.doc结尾的文件就只能用"{}"了,想一想为什么 

"{}“还支持嵌套的通配,以”{x,y}"为例,如果x和y各自本身也是通配符,那效果就更强大了。

#想一想下列示例的含义ls -l {[A-Z]*.doc,[0-9]??.txt}
  1. "^“符号和”!“符号
    这两个符号往往和”[]“一起使用,当出现在”[]"中的时候代表取反,所以[^A]和[!A]代表不是A。
通配符和正则表达式之间存在一些差异,特别是有些相同的字符既用在正则表达式中又用在通配符中,极易造成混淆和干扰,只有通过多读多想才能加深理解和认识!简单的说,正则表达式主要用在文件内容的匹配上,而通配符主要用在文件名的匹配上,可以用这种方法来区别二者。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值