前言

正则表达式描述了一种字符串匹配的模式是怎么回事呢?正则表达式相信大家都很熟悉,但是正则表达式描述了一种字符串匹配的模式是怎么回事呢,下面就让小编带大家一起了解吧。

正则表达式描述了一种字符串匹配的模式,其实就是正则表达式可以用来匹配字符串,大家可能会很惊讶正则表达式怎么会描述了一种字符串匹配的模式呢?但事实就是这样,小编也感到非常惊讶。

这就是关于正则表达式描述了一种字符串匹配的模式的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦!【大雾】

是什么

在阐述我自己的理解前,先搬出百度百科的内容撑撑场面。

度娘百科

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

从上面三段内容可以看到,关键词检索、过滤、匹配。而这些工作让我想到了 ? *
我相信大多数人对 ? *的作用应该不陌生。在Word文档中,?用于匹配单一字符,*用于匹配多个字符。

例如下面这个例子。我在编辑这篇文章时,发现我居然蠢到把每一个正则表达式都打错了。只有第一个字最后一个字是正确的。

于是我果断地按下了 Ctrl H,勾选了使用通配符。由于第一个字最后一个字是正确的,因此查找的内容只需为正*式即可检索到所有错误的正则表达式文本。然后点击全部替换。便轻松愉快地全部修正了。

或许这时候你要问了。就这?就这?就这?怎么可能会有sabi犯这种错误啊这玩意儿有什么用?
嗐。您可别着急。如果说正则表达式并不是这种简单的?*呢?


快速上手

最简单的匹配情况

最简单的匹配情况相当容易想到,即表达式本身等同于要匹配的表达式。例如使用China匹配下面的文本。就会匹配到下面两个China子字符串。

I love China. Long live China!

简单的几个符号

再来介绍几个简单的符号,引用我本学期的「编译原理」课程PPT中的一张图片。

选项 Choice among alternatives

rs是两个正则表达式,那么r|s既可以匹配r能匹配的字符串,也能匹配s能匹配的字符串。
例如使用正则表达式China|Long就能匹配到三个子字符串了。

I love China. Long live China!

连接 Concatenation

连接没有符号,直接把一个正则表达式与另一个正则表达式相连即可。
例如之前举过的例子China能够匹配字符串中的China子串。这里是五个字符直接相连的正则表达式。
又例如,(a|b)c,能够匹配字符串 acbc

重复 Repetition

重复也被称作是闭包(closure),用符号*表示,其内涵是可以把*所作用的表达式重复0次或多次
注意,作用的表达式是*前的字符串,如果没有打括号的话,就只有一个字符。
例如a*能够匹配空字符串aaaaaa等等。
再例如对于正则表达式(a|bb)*,能够匹配空字符串abbaaabbbbabbbbaaaaabbbbaabbabbabbbba等等。

更多符号

熟悉的老朋友通配符 .

这里的.的作用等同于我在是什么那一节中举例的Word软件中的?
它可以匹配一个除了换行符以外的字符。

加号 +

和重复*类似,不过加号是匹配子表达式一次或多次
zo(rua)+能够匹配zoruazoruaruazoruaruarua等等。但是不能匹配zo

问号 ?

还是和重复*类似,不过问号是匹配子表达式0次或一次

字符集合 [ ]

匹配所包含的任意一个字符。例如,[abc] 可以匹配plain中的a[a-z]表示一个范围,可以匹配二十六个字母。
[a-cf-l]表示字母的ac,然后fl。也可以使用数字[0-9]

否定符号 ^

[^xyz]是对[xyz]的否定,即匹配除去xyz三个字母后的其他字符。

匹配次数大括号 { }

大括号内填写一个非负整数。
代表前面的表达式应该被匹配的次数。

限制下限

如果填写为{n,}的形式,则可以匹配n次以上。

限制下限上限

如果填写为{n,m}的形式,则可以匹配n次以上,最多m次。

转义符号

\将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 \\ 匹配 \\( 则匹配 (

转义符号的设计使得一些难以输入的字符可以被匹配,或已被使用的字符(例如问号?被在正则表达式里被认为是0,1次匹配。)

在线测试正则表达式

除了可以在程序内调试正则表达式外,也可以使用在线的一些工具测试正则表达式。例如下面的几个网站。

写在最后

关于正则表达式的内容还有很多,一篇文章难以详尽。日后如果有时间,我会再次学习。
在本篇文章中,多处参考了我的朋友Kooer的博文,在此表示对他衷心感谢。
您可以在这个链接看到他的博文。