专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

正则表达式教程,正则表达式的基本用法

来源:小易整编  作者:小易  发布时间:2023-03-30 09:48
摘要:正则表达式教程,正则表达式的基本用法无论是前端、后端,或者是客户端,还是算法;甚至是普通的非开发的用户,我觉得正则表达式都有必要去学习了解,因为它可以极大的提升我们的工作效率,这点对于开发人员来说可能体会更加深刻,特别是在定位线上问题的时候...

正则表达式教程,正则表达式的基本用法

最后,我们来介绍下[]和^的结合体[^  ],它表示匹配指定范围外的任意单个字符,和[]含义相反,举个例子,[a-zA-Z]表示匹配任意单个大小写字母,那么对应的[^a-zA-Z]则表示只要不是大小写字母就匹配。这样说是不是就明白了。

分组引用

我们来了解一下正则中的”分组”与”后向引用”。首先来看看什么是分组?还是先看个案例:需要从某个文件中找出,"ha"连续出现2次的行。

可能部分同学很快会写出如下的正则表达式:

正则表达式教程,正则表达式的基本用法

很遗憾,这种写法是错误的,结果并不是我们想要的,这是因为"ha\{2\}"中,”\{2\}”所影响的只是其前面的单个字符,也就是字母a,也就是说,"ha\{2\}"匹配的是类似"haa", "haaab"等这样的字符串。

如果想要满足我们的需求,就需要用到”分组”,将”ha”当做一个”分组”,也就是说当做一个”整体”,才可以达到我们的目的,正确的写法如下:

正则表达式教程,正则表达式的基本用法

如上图所示,”\(ha\)”表示将ha字符串当做一个整体,所以,”\{2\}”所影响的就是前面的”ha"整个字符串。

后向引用

介绍完了分组,我们再来看看什么是后向引用,如果对分组还没理解的同学还是建议好好回过头复习下,否则后面会完全不知道在说什么。

后向引用是以分组为前提的,只有先进行分组,才能实现后向引用。为了描述清楚什么是后向引用,我们还是先循序渐进看几个例子。

假设有如下一个文件test2.txt,其内容如下:

正则表达式教程,正则表达式的基本用法

我们可以使用如下正则表达式去匹配test2.txt文件中的所有行:“h.\{3\}”表示h的后面跟随了3个任意字符,所以,”h.\{3\}”既可以匹配到haha,也可以匹配到hihi,因此文件中的三行都匹配上了。

正则表达式教程,正则表达式的基本用法

但是,现在我只想找出”java”前后单词相同的那些行,也就是说,java之前的单词如果是haha,java之后的单词也要是haha,不能是其它,对于上面例子,第三行是不能被搜索出的。因为第三行中,java之前的单词是haha,而java之后的单词是hihi,前后不一致。
这个时候,就需要用到”后向引用”,示例如下。

正则表达式教程,正则表达式的基本用法

可以看到,使用正则表达式"\(h.\{3\}\)java\1"达到了我们的要求,我们来分析下这个表达式的含义:

红色部分\(h.\{3\}\):表示大写字母h的后面跟随了3个任意字符,并且字母h与后面的3个字符将作为一个整体看待。

蓝色部分”\1″:表示整个正则中第1个分组中的正则所匹配到的结果,什么意思了,拿这个例子来说,整个正则表达式只有一个分组\(h.\{3\}\), 当分组与文件第一行匹配会匹配出haha,那么\1就表示haha。当分组与文件第二行匹配会匹配出hihi,那么\1就表示hihi。也就是说,”\1″引用了整个正则中第1个分组中的正则所匹配到的结果。


有"\1",那么就有"\2","\3"等等,明白了"\1"表达的含义,"\2"的含义也不难推断出,“\2″表示引用整个正则中第2个分组中的正则所匹配到的结果。“\3″表示引用整个正则中第3个分组中的正则所匹配到的结果,等等依次类推。
好了,现在的问题是在一个正则表达式中怎样区分哪个分组是第1个分组,哪个是第2个分组,特别是当分组存在嵌套时。我们还是通过一个例子来讲述吧。


上面的两个正则表达式中,都出现了两个分组,一个分组嵌套着另一个分组。红色标注的符号是一对分组符号,蓝色标注的符号是一对分组符号,红色分组嵌套这蓝色分组。

再来详细分析两个正则表达式,除了”后向引用”的数字不一样,其它都是一模一样,但是得到的结果完全不一样。

在正则表达式中,分组的顺序取决于分组符号的左侧部分的顺序,也就是说,红色标注的左侧在蓝色标注左侧的前面,所以红色标注是第1个分组,蓝色标注的是第2个分组。

理解了上面这一点,再来分析两个正则表达式就很简单了,第一个正则表达式"\(x\(yz\)ab\)\1"中,后向引用的是第1个分组,而第1个分组是外面的\(x\(yz\)ab\),它匹配到xyzab,\1表示后向引用第1个分组匹配的结果xyzab,那么整个正则表达式匹配的是xyzabxyzab。

第一个正则表达式"\(x\(yz\)ab\)\2"中,后向引用的是第2个分组,而第2个分组是外面的\(yz\),它匹配到yz,\2表示后向引用第2个分组匹配的结果yz,那么整个正则表达式匹配的是xyzabyz。

扩展正则表达式

前面我们介绍的都是基本正则表达式,其实在Linux中,正则表达式可以分为”基本正则表达式”和”扩展正则表达式”。

看到这里,有同学可能就懵了,好不容易将前面的内容理解的差不多了,你竟然跟我说还有扩展正则表达式,不过不要担心,只要你掌握了基本正则表达式的用法,我可以保证你掌握扩展正则表达式那是分分钟的事。

其实,扩展正则表达式和前面介绍的基本正则表达式的符号至少80%是一样的。

这里我们将两者不同的地方总结如下:

含义
基本正则表达式对应的扩展正则表达式
匹配其前面的字符0或1次\?
?
匹配其前面的字符1或多次\+
+
匹配前面的字符连续出现m次\{m}\{m}
匹配前面的字符至少连续出现m次\{m,}\{m,}
匹配前面的字符最多连续出现n次\{,n}\{,n}
匹配前面的字符连续出现至少m次,最多n次\{m,n}\{m,n}

|

可以看到,相对于基本正则表达式,对于次数匹配的很多符号,其对应的扩展正则表达式少了前面的”\”,更加简洁了,可读性也就就变强了。

下面来示范下扩展正则表达式如何用,如果希望grep命令能够支持扩展的正则表达式,需要使用”-E”选项。

我们重点来介绍下"|"的用法,基本正则表达式中没有这个符号,“|”在扩展正则表达式中,表示”或”,如果还不明白,我相信看完下面几个示例就肯定明白了。
这是一个文件test2.txt,其内容如下:

我们想要找出行首以"ha"开始的行,通过前面的学习,相信你能很快写出:

同理,如果想要找出行首以"hi"开始的行,其正则表达式如下:

好了,重头戏来了,现在我们想要找出文件中行首以"ha"开始的行,或者行首以"hi"开始的行,这就用到了"|"。“|”在扩展正则表达式中,就表示”或”的含义,如下所示:

这里再解释下,上图中的正则表达式使用了分组符号”( )”,”(ha|hi)”表示将括号内的内容看做一个整体,而括号内的内容为”ha|hi”,它表示”ha或者hi”,所以,”^(ha|hi)”就表示以ha或者hi开头的行。现在是不是明白了"|"的用法。
扩展正则表达式就介绍完了,是不是特别简单,至少我自己在学完基本正则表达式之后,我只花了几分钟就将扩展正则表达式收拾的服服帖帖。
好了,正则表达式就介绍完了,虽然不是很难,但是在一些比较复杂的场景要写出一个完全正确的正则表达式也是不容易的,后面就需要自己多练习实践了。


本文地址:百科问答频道 https://www.neebe.cn/wenda/944671_3.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!

共3页 1 2 3 当前是最后一页

百科问答
小编:小易整编
相关文章相关阅读
  • 安卓手机怎么刷机教程

    安卓手机怎么刷机教程

    对于大部分安卓手机用户来讲,刷机是不可避免的。可是我们都知道刷机是有一定的风险的,有些用户还是不敢随意的刷机。我们先来了解一下安卓手机怎么刷机?操作方法01先关机,然后按住音量减键,再同时按开机键,即...

  • creo4.0完全自学教程

    creo4.0完全自学教程

    在机械零件设计的众多软件中,PRO/ECREO4.0可以说是很典型的一款设计软件,为设计工程师的工作省了很多的事情,让设计师在设计时更高效。下面一起来看看自觉的基础教程。操作方法01打开CREO4....

  • CEBX电子书制作图文教程

    CEBX电子书制作图文教程

    今天小编在这里介绍一下CEBX的特点和优点,以及怎样制作CEBX的电子书吧~ApabiReaderforiOS是一款新发布的,支持CEBX、PDF及TXT格式图书的电子书阅读器。这款软件有很多独特的功能是针对CEBX格式的图书所特有...

  • 酷我音乐直播在哪里? 酷我音乐观看直播的教程

    酷我音乐直播在哪里? 酷我音乐观看直播的教程

    酷我音乐想要看看直播,今天我们就来看看酷我手机端和电脑端看直播的教程。一、手机端酷我音乐观看直播的方法1、首先手机上要有酷我的软件,点击进入酷我音乐,之后手机页面如图所示2、酷我最上面有“直播”两字,然后点击&ldq...

  • ai海报怎么做(ai海报制作教程图文)

    ai海报怎么做(ai海报制作教程图文)

    阅前叨逼叨hello大家早上好我是大家的好朋友,我叫天天,昨晚翻阅超久才看到野鹿志这个教程,本次教程是用ai结合ps做的,说难不难(貌似很多会psai的人都这样说吧哈哈)说简单吧,其实细节调整也是需要花一点心思的。本次教程的图片多...

  • 绘制一台复古风电视机【PS教程】

    绘制一台复古风电视机【PS教程】

    小编:新手福利来啦!今天带来一个复古风格的旧电视图标临摹教程,图层样式是这次教程的重点。过程细致,步骤具体,新手最好掌握起来。把这个练完,绝对有不一样的收获!这里再次强调一点,图层样式中的参数设置是对应其相应图层的,受图层大小尺寸影响,在不...

  • bilibili直播姬怎么用 哔哩哔哩直播姬使用图文教程

    bilibili直播姬怎么用 哔哩哔哩直播姬使用图文教程

    哔哩哔哩直播姬怎么用?为了能方便广大新手主播快速上手b站的直播系统,哔哩哔哩最近推出了一款一键直播工具bilibili直播姬,这款软件可以让你不用再去设置麻烦的obs不用再去安装弹幕姬插件,软件集成了一切的功能,你想要开播只用点一下开始直播...

  • HostEase注册域名教程

    HostEase注册域名教程

    我们可以在HostEase主机商购买虚拟主机(一般会赠送免费域名),当然也可以注册域名,不过不建议单独注册域名。对于广大新用户来说可能还不清楚注册域名的具体步骤,下面来说说在HostEase注册域名的过程步骤/方法0...

  • 周排行
  • 月排行
  • 年排行

精彩推荐