正则表达式匹配固定开头结尾_正则表达式讲解

正则表达式(regex)是什么?用途是什么?

1、新手上路

本质上来看,正则表达式是定义一种搜索模式的字符序列。正则表达式通常用于 grep 等工具中,以在较长文本字符串中查找模式。考虑以下一个 cat.txt 文件:

catcat2dog

如果我们使用正则表达式 cat 来搜索匹配项,我们会找到以下匹配项:

catcat2

高级用户需要注意的是,本文存在一个技术上的错误,即正则表达式和使用正则表达式的工具(如 grep)混为了一谈。

1.1、正则表达式适用于字符,而不是单词

需要反复强调的一个重要问题是:正则表达式适用于字符,而不是单词。隐含串联。

76ace23f8dff589d153347ce7ef73661.png

如果我们使用正则表达式搜索模式 cat,则不会查找单词「cat」,而会查找字符 c、a 和 t。

1.2、点和星号

最基本的字符是单个字符,如 a、b、c 等。现在让我们介绍以下两种特殊的字符。

  • (点)字符可以匹配*任何单个字符*。例如,如果我们搜索 c.t,则将匹配从 cat 到 c0t 或 cAt 的任何内容,并将匹配任何单个字符 c +任何字符+单个字符 t。
  • (星号)字符有点困难。它修改它前面的字符,然后匹配该字符的*零个或多个字符*。的确如此。例如,cat*可以匹配 cat、catt、cattttt 以及 ca。

假设我们逐行读取一个文件,则第一行如下所示:

The cat ate my homework.

让我们看看如何匹配该行中的模式 cat。

6d0dea5ae437fddec89ca564f8ef945f.png

我们首先将该模式的首字符与句子中的首字符匹配。如果找不到匹配项,则跳转至该行中的下一个字符,然后再从模式的首字符开始。如果我们找到一个匹配项,则将跳转至模式和该行中的下一个字符,然后重复这个过程。当我们找到整个模式的匹配时,返回找到匹配项的行。这就是正则表达式最基本、最常用的功能,即在较大的字符串中查找较小的搜索模式。

2、正则表达式组件

正则表达式的各个部分可以由三个不同的组件组成:

  • 锚点
  • 字符集
  • 修饰符

这三部分构成了正则表达式的三叉戟!

e622f7c0d806a3df7f58af71d0da0233.png

2.1、锚点

锚点指定个各行的模式位置。下面是两个最重要的锚点:

  • ^(插入符号)将模式固定到行首。例如,模式^1 匹配以 1 开头的任意行。
  • $(美元符)将模式固定到句尾。例如,9$匹配以 9 结尾的任意行。

注意,在以上两种情况下,锚点必须分别位于模式的开头和结尾。^1 匹配行首的 1,但 1^匹配后跟^的 1。类似地,1$匹配以 1 结尾的行,但$1 匹配一个该行任意位置后跟 1 的美元符号。

2.2、字符集

字符集是正则表达式的基础。单个字符,比如 a,是最基本的字符集(一组元素)。但是 [0-9] 等正则表达式可以匹配任何一个数字,或者如果你能回想到 *的含义,则可以制作模式 [0-9][0-9]。其他一些重要的字符集:

  • [0-9] 匹配 0…9 中的任何一个数字
  • [a-z] 匹配任何小写字母
  • [A-Z] 匹配任何大写字母

还可以对多个字符集进行组合:

  • [A-ZA-Z0-9] 匹配任何大小写字母和单个数字。

2.3、修饰符

修饰符以前面遇到的一个修饰符 *(星号)为例。修饰符改变它前面字符的含义。还有很多其他的修饰符,但以* 为例进行讨论是一个很好的开始。

$ echo "The cat jumps long time Then we also have the fact that these are words.1234 this is a test post please ignore." >> grep.txt

这是现在文件中的内容。

$ cat grep.txtThe cat jumps long timeThen we also have the fact that these are words.1234 this is a test post please ignore.

寻找 cat。

$ grep "cat" grep.txtThe cat jumps long time

寻找任何以数字^[0-9] 开始的任意行。

$ grep "^[0-9]" grep.txt1234 this is a test post please ignore.
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值