正则表达式

1. 基本概念

        正则表达式(Regular Expression,简称 regex 或 regexp)是一种强大的文本模式匹配工具,用于在字符串中搜索、匹配、替换特定的文本模式。本文将介绍正则表达式的基本概念和常用模式,并通过一个日常使用的例子来展示正则表达式的实际应用。

        

        正则表达式由普通字符(如字母、数字)和特殊元字符(如 \, ^, $, .)组成,通过这些元字符的组合可以描述字符串的复杂模式,从而实现对字符串的高效处理。正则表达式又分为基本正则表达式和扩展正则表达式:

基本正则和扩展正则:

以下是基本正则和扩展正则的一些常用元字符和它们的简单说明,以表格形式展示:

元字符基本正则(BRE)扩展正则(ERE)说明
...匹配任意单个字符(除换行符外)
***匹配前面的子表达式零次或多次
^^^匹配行首
$$$匹配行尾
[][][]匹配一个指定范围内的字符(如[a-z]表示任意小写字母)
\\\(部分情况无需)转义字符,用于匹配特殊字符或表示特殊序列(在ERE中,部分特殊字符无需转义)
\{n,m\}\{n,m\}{n,m}匹配前面的子表达式至少n次,但不超过m次(ERE中去掉反斜杠)
\{n\}\{n\}{n}匹配前面的子表达式恰好n次(ERE中去掉反斜杠)
\{n,\}\{n,\}{n,}匹配前面的子表达式至少n次(ERE中去掉反斜杠)
\(\)\(\)()组合为整体保留
?不支持?匹配前面的子表达式零次或一次(ERE特有)
+不支持+匹配前面的子表达式一次或多次(ERE特有)
|不支持|逻辑“或”操作,匹配左侧的表达式或右侧的表达式(ERE特有)
\b\b\b匹配单词边界(在ERE中同样使用)

请注意,这个表格是基于常见用法和一般规则整理的,不同的正则表达式引擎(如grep、sed、awk等)可能会有细微的差别。此外,一些特殊用法(如POSIX字符类)可能没有在表格中列出,但它们也是正则表达式的重要部分。

2. 例

2.1 测试 ^ $ [] [^]

grep ^root user                #找以root开头的行
grep bash$ user                #找以bash结尾的行
grep ^$ user                   #找空行
grep -v ^$ user                #显示除了空行的内容
grep "[root]" user             #找r、o、t任意一个字符 
grep "[rot]" user              #效果同上
grep "[^rot]" user             #显示r或o或t以外的内容
grep "[0123456789]" user       #找所有数字
grep "[0-9]" user              #效果同上
grep "[^0-9]" user             #显示数字以外内容
grep "[a-z]" user              #找所有小写字母
grep "[A-Z]" user              #找所有大写字母
grep "[a-Z]" user              #找所有字母
grep "[^0-9a-Z]" user          #找所有符号

2.2 测试 . *

grep "." user                 #找任意单个字符,文档中每个字符都可以理解为任意字符
grep "r..t" user              #找rt之间有2个任意字符的行
grep "r.t" user               #找rt之间有1个任意字符的行,没有匹配内容,就无输出
grep "*" user                 #错误用法,*号是匹配前一个字符任意次,不能单独使用
grep "ro*t" user              #找rt,中间的o有没有都行,有几次都行
grep ".*" user                #找任意,包括空行 .与*的组合在正则中相当于通配符的效果

2.3 测试 \{n\} \{n,\} \{n,m\} \(\)

grep "ro\{1,2\}t" user        #找rt,中间的o可以有1~2个
grep "ro\{2,6\}t" user        #找rt,中间的o可以有2~6个
grep "ro\{1,\}t" user         #找rt,中间的o可以有1个以及1个以上
grep "ro\{3\}t" user          #找rt,中间的o必须只有有3个
grep "\(0:\)\{2\}" user       #找连续的2个0:  小括号的作用是将字符组合为一个整体

2.4 扩展正则表达式

  • 以上命令均可以加-E选项并且去掉所有\,改成扩展正则的用法
  • 比如grep "ro\{1,\}t" user可以改成 grep -E "ro{1,}t" user
  • 或者egrep "ro{1,}t" use
grep "ro\{1,\}t" user            #使用基本正则找o出现1次以及1次以上
egrep "ro{1,}t" user             #使用扩展正则,效果同上,比较精简
egrep "ro+t" user                #使用扩展正则,效果同上,最精简
grep "roo\{0,1\}t" user          #使用基本正则找第二个o出现0~1次
egrep "roo{0,1}t" user           #使用扩展正则,效果同上,比较精简
egrep "roo?t" user               #使用扩展正则,效果同上,最精简
egrep "(0:){2}" user             #找连续的2个0:  小括号的作用是将字符组合为一个整体
egrep "root|bin" user            #找有root或者bin的行
egrep  "the\b" abc.txt           #找单词the,右边不允许出现数字、字母、下划线
egrep  "\bthe\b" abc.txt         #the两边都不允许出现数字、字母、下划线
egrep  "\<the\>" abc.txt         #效果同上

 

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值