快速学习正则表达式,不用死记硬背,示例让你通透(上篇)_脱字符

正则表达式模式利用通配符来描述数据流中的一个或多个字符。
Linux
中有很多场景都可以

使用通配符来描述不确定的数据。【*】号在我们工作中就比较常用。

示例说明:

a.*参数会让ls命令只列出名字以a开头的文件。文件名中a之后可以有任意多个字符(包括什么也没有)。ls命令会读取目录中所有文件的信息,但只显示跟通配符匹配的文件的信息。

二、正则表达式的类型

使用正则表达式最大的问题在于有不止一种类型的正则表达式。
Linux
中的不同应用程序可能会用不同类型的正则表达式。这其中包括编程语言(Java

Perl

Python
)、
Linux
实用工具(比 如sed
编辑器、
gawk
程序和
grep
工具)以及主流应用(比如
MySQL

PostgreSQL
数据库服务器)。正则表达式是通过正则表达式引擎(
regular expression engine
)实现的。正则表达式引擎是一套底层软件,负责解释正则表达式模式并使用这些模式进行文本匹配。

两种流行的正则表达式引擎:

  • POSIX基础正则表达式(basic regular expression,BRE)引擎
  • POSIX扩展正则表达式(extended regular expression,ERE)引擎

POSIX BRE引擎通常出现在依赖正则表达式进行文本过滤的编程语言中。它为常见模式提供了高级模式符号和特殊符号,比如匹配数字、单词以及按字母排序的字符。awk程序用ERE引擎来处理它的正则表达式模式。

说明:

由于实现正则表达式的方法太多,很难用一个简洁的描述来涵盖所有可能的正则表达式。后面会结合sed和awk演示最常见的正则表达式。

三、定义 BRE 模式

最基本的
BRE模式是匹配数据流中的文本字符。下面会演示如何在正则表达式中定义文本以及会得到什么样的结果。

3.1 纯文本

演示说明:

模式定义了一个单词
test

sed
编辑器和
gawk
程序脚本用它们各自的
print
命令打印出匹配该正则表达式模式的所有行。由于echo
语句在文本字符串中包含了单词
test
,数据流文本能够匹配所定义的正则表达式模式,编辑器能显示该行。

正则表达式是区分大小写的:

演示说明:

第一次尝试没能匹配成功,因为
this
在字符串中并不都是小写,而第二次尝试在模式中使

用大写字母,所以能正常输出。

在正则表达式中,你不用写出整个单词。只要定义的文本出现在数据流中,正则表达式就能

够匹配。

演示说明:

数据流中的文本是
books
,在数据中含有正则表达式
book
,因此正则表达式模式跟数据匹配。

在正则表达式中,空格和其他的字符并没有什么区别。

演示说明:

空格的出现无法和文本内容匹配。

如果在正则表达式中定义了空格,那么它必须出现在数据流中。甚至可以创建匹配多个连续空格的正则表达式模式。

演示说明:

单词间有两个空格的行匹配正则表达式模式。

3.2 特殊字符

正则表达式识别的特殊字符包括:

.*[]^${}+?|()

如果要用某个特殊字符作为文本字符,就必须
转义
。在转义特殊字符时,你需要在它前面加一个特殊字符反斜杠(\)来告诉正则表达式引擎应该将接下来的字符当作普通的文本字符。

示例说明:

查找文本中的美元符,只要在它前面加个反斜线。

3.3 锚字符

默认情况下,当指定一个正则表达式模式时,只要模式出现在数据流中的任何地方,它就能匹配。有两个特殊字符可以用来将模式锁定在数据流中的行首或行尾。

3.3.1 锁定在行首

脱字符(
^
)定义从数据流中文本行的行首开始的模式。如果模式出现在行首之外的位置,正则表达式模式则无法匹配。

要用脱字符,就必须将它放在正则表达式中指定的模式前面。

脱字符会在每个由换行符决定的新数据行的行首检查模式。

示例解说:

只要模式出现在新行的行首,脱字符就能够发现它。

演示说明:

脱字符出现在正则表达式模式的尾部,sed编辑器会将它当作普通字符来匹配。

注意:

如果指定正则表达式模式时只用了脱字符,就不需要用反斜线来转义。但如果在模式中先指定了脱字符,随后还有其他一些文本,那么必须在脱字符前用转义字符。

3.3.2 锁定在行尾

跟在行首查找模式相反的就是在行尾查找。特殊字符美元符(
$
)定义了行尾锚点。将这个特殊字符放在文本模式之后来指明数据行必须以该文本模式结尾。

3.3.3 组合锚点

在一些常见情况下,可以在同一行中将行首锚点和行尾锚点组合在一起使用。在第一种情况中,假定你要查找只含有特定文本模式的数据行。

示例说明:

匹配文本中以test开头和以test结尾的行

将两个锚点直接组合在一起,之间不加任何文本,这样过滤出数据流中的空白行。

示例说明:

定义的正则表达式模式会查找行首和行尾之间什么都没有的那些行。由于空白行在两个换行符之间没有文本,刚好匹配了正则表达式模式。sed
编辑器用删除命令
d
来删除匹配该正则表达式模式的行,因此删除了文本中的所有空白行。

3.4 点号字符

特殊字符点号用来匹配除换行符之外的任意单个字符。它必须匹配一个字符,如果在点号字符的位置没有字符,那么模式就不成立。

示例解说:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,size_20,color_FFFFFF,t_70,g_se,x_16)

示例解说:

[外链图片转存中…(img-g58ngOdl-1714799525725)]
[外链图片转存中…(img-CpVPCVTr-1714799525726)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值