如果你跟我一样是菜鸟,那应该看看这篇正则表达式指南

这是一篇正则表达式的图解指南,这个指南适合那些从未摆弄过,刚开始想要学习正则表达式,却被吓了个半死的人(像我一样)。对没有受过正规计算机教育的人来说,正则表达式好像是只有最核心的 Unix 程序员才敢接触。

但其实不然。一个好的正则表达式看似神奇,但要记住这一点:任何足够先进的技术都跟魔法无异。所以我们不要被它给吓到,这篇文章让我们从最基础的知识开始,了解什么是正则表达式以及它们用于什么?

开始!

正则表达式的核心是定义搜索模式的字符序列。通常用在像grep这样的工具中,可以在更长的文本字符串中查找我们想要的内容。

假设有这么一个文件 cat.txt ,内容很简单,只有三行:

cat
cat2
dog

如果我们使用 cat 这样的表达式来进行检索,那么我们可以获得结果

cat
cat2

(对于硬核用户来说,在这篇文章中,我把正则表达式和使用正则表达式的工具(如grep)混淆。我知道这在技术上是错误的,只是为了表达方便)

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

在这里需要强调的是:正则表达式适用于字符,而不是单词。串联是隐含的。

如果我们使用正则表达式搜索模式cat,我们不是在寻找“cat”这个词,而是我们正在寻找字符 c 而后跟一个a,而后又跟 t 字符。

点和星号

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

点号(.) 字符匹配任何单个字符。例如,如果我们搜索c.t,我们将匹配从cat到c0t或cAt的任何内容,我们将匹配任何单个c,后跟任何字符,后跟单个t 字符。

*(星号)字符有点难度。它修改前面的字符,然后匹配零个或多个字符。是的,再读一遍,零个或多个字符。例如,cat *会匹配cat,catt,cattttt但也会匹配。

猫吃了我的作业

想象一下,我们逐行读取文件,第一行如下:

The cat ate my homework.

让我们来看看我们如何匹配这一行中的 cat 这个模式。

我们首先将模式的第一个字符与句子中的第一个字符进行匹配。

如果我们找不到匹配项,我们会跳到该行中的下一个字符,并从该模式的第一个字符开始。

如果我们找到匹配项,我们将转到模式和行中的下一个字符并重复此过程。当我们找到整个模式的匹配时,我们返回找到匹配的行。

这就是正则表达式最常用于最基本的级别,以便在更大的字符串中找到更小的搜索模式。

到目前为止,我们已经了解了正则表达式和两个特殊字符,即 . 号和 *(星号),但还有更多。

正则表达式三剑客

正则表达式包含三个主要的组件:

  • 字符集

  • 修饰符

这三个组成了...正则表达式三剑客!

我们先从锚点开始。

锚点

锚点指定图案相对于线条的位置。这是两个最重要的锚点:

  • ^(插入符号)将您的模式匹配到行的开头。例如,模式^ 1匹配以1开头的任何行。

  • $(美元)将您的模式匹配到句子的末尾。例如,9 $匹配任何以9结尾的行。

请注意,在这两种情况下,模式必须分别在模式中的第一个和最后一个。^ 1在一行开头匹配1,但1 ^匹配1后跟^。同样,1 $匹配以1结尾的行,但$ 1匹配一个美元符号,后跟行上的任意位置1。

下一部分是字符集。

字符集

字符集是正则表达式的面包和黄油。单个字符,比如a,是最原子的字符集(一个元素的集合)。但是我们可以使用像[0-9]那样匹配任何单个数字的正则表达式来做疯狂的事情,或者如果你还记得我们可以制作模式[0-9] [0-9] *(这个模式匹配的是什么) 作为读者的练习)。

其他一些重要的字符集:

  • [0-9] 匹配任意单个数字

  • [a-z] 匹配任意小写字母

  • [A-Z] 匹配任意大写字母

我们也可以合并多个字符集:

  • [A-Za-z0-9] 匹配任意大写、小写字母以及数字

修饰符

这里我不想太深入的介绍,我们之前已经使用的  *(星号)是一个修饰符。修饰符会更改其前面字符的含义。还有许多其他修饰符,但从 * 开始比较容易理解。

一个具体的例子

首先我们快速生成一个包含某些文本的文件:

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

文件内容如下:

$ cat grep.txt

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

然后咱们搜索一下 cat

$ grep "cat" grep.txt

The cat jumps long time

接下来我们搜索任意以数字开头的行

$ grep "^[0-9]" grep.txt

1234 this is a test post please ignore.

你刚刚就在使用正则表达式,是不是棒极了?

总结

在这篇文章中我们介绍了:

  • 正则表达式的基本功能

  • 正则表达式的三个主要的组件:锚点、字符集和修饰符

  • . (点), * (星号), ^ (插入符号) 以及 $ (美元符).

  • 一些字符集 [0-9], [a-z], [A-Z] 和字符集的合并

这篇博文的目的是通过插图介绍使正则表达式更加容易理解。

如果你已经摆脱了正则表达式在技术上的困难,你最终就得到的是一个相对简单但超级强大的工具。

给自己点赞吧,你已经没资格当菜鸟了!

本文翻译自 https://www.janmeppe.com/blog/regex-for-noobs/

图文版请看公众号“红薯胡说”

转载于:https://my.oschina.net/javayou/blog/3083941

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值