千家信息网

怎么实现Perl正则表达式匹配

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"怎么实现Perl正则表达式匹配",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么实现Perl正则表达式匹配"这篇文章吧。Perl
千家信息网最后更新 2026年11月01日怎么实现Perl正则表达式匹配

这篇文章主要为大家展示了"怎么实现Perl正则表达式匹配",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么实现Perl正则表达式匹配"这篇文章吧。

Perl正则表达式详解

Perl正则表达式有三种形式:匹配、替换和转换。接下来对每一个表达式给出详尽解释。

Perl正则表达式匹配:m//这种形式表明在//内部的正则表达将用于匹配=~或!~左边的标量。为了语法上的简化用//,略去m。

Perl正则表达式替换:s///这种形式表明Perl正则表达式将被文本替换,为了语法的简化用//略去s。

Perl正则表达式转换:tr///这种形式包含一系列的字符—/—同时把它们替换为。

注意转换并不真正是一个Perl正则表达式,但是对于用Perl正则表达式难于处理的数据常使用它来进行操纵。因此,tr/[0-9]/9876543210.组成1223456789,987654321等字符串。

◆通过使用=~(用英语讲:does,与"进行匹配"同)和!~(英语:doesn't,与"不匹配"同)把这些表达式捆绑到标量上。作为这种类型的例子,下面我们给出六个示例Perl正则表达式及相应的定义:

$scalarName=~s/a/b;#substitutethecharacteraforb,andreturntrueifthiscanhappern   $scalarName=~m/a;#doesthescalar$scalarNamehaveanainit?   $scalarName=~tr/A-Z/a-z/;#translateallcapitalletterwithlowercaseones,andreturntureifthishappens   $scalarName!~s/a/b/;#substitutethecharacteraforb,andreturnfalseifthisindeedhappens.   $scalarName!~m/a/;#doesthescalar$scalarNamematchthecharactera?Returnfalseifitdoes.   $scalarName!~tr/0-9/a-j/;#translatethedigitsforthelettersathruj,andreturnfalseifthishappens

.如果我们输入像hornedtoad=~m/toad/这样的代码,则出现图9-1所示情况:

另外,如果读者正在对特定变量$_进行匹配(读者可能在while循环,map或grep中使用),则可以不用!~和=~。因而,以下所有代码都会合法:

my@elemente=('al','a2','a3','a4','a5');   foreach(@elements){s/a/b/;}

程序使@elements等于b1,b2.b3,b4,b5。另外:

while(<$FD>){printif(m/ERBOR/);}

打印所有包含error字符串的行:

if(grep(/pattern/,@lines)){print"thevariable\@lineshaspatterninit!\n";}

打印所有包含模式pattern内容的行,这直接引入下一原则。


◆Perl正则表达式匹配。

Perl正则表达式尽在标量上匹配,注意这里标量的重要性,如果读者试一试如下代码:

@arrayName=('variablel','variable2');   @arrayName=~m/variable/;#looksfor'variable'inthearray?No!usegrepinstead

那么@arrayName匹配不成功!@arrayName被Perl解释为2,于是这意味着读者在输入:

'2'=~m/variable/;

至少讲这不能给出预想的结果。如果读者想这样做,输人为:

grep(m/variable/,@arrayName);

该函数通过@arrayName中的每一个元素进行循环,返回(在标量环境中)匹配的次数,同时在数组环境中返回匹配元素的实际列表。

 
◆对于给定的模式串,Perl正则表达式只匹配最早出现的匹配项。匹配时缺省一次只匹配或替换一次。

这个原则使用称为"回溯"的过程指出如何匹配一个给定的字符串;如果发现了一个局部匹配进而找到使该匹配无效的东西,Perl正则表达式在字符串中"回溯"最小的可能数量,这个数量的字符要保证不丢失任何匹配。

对于理解Perl正则表达式正在做什么,这个原则是最有帮助的一个,同时不需要与Perl一样的形式来理解它正在做什么。假定有如下模式:'Sillypeopledosillythingsifinsillymoods'

同时想匹配如下模式:'sillymoods'

那么Perl正则表达式引擎匹配silly,接着遇到people的P,至此,Perl正则表达式引擎知道***个silly不匹配,于是Perl正则表达式引擎移到P且继续寻求匹配。它接着遇到第二个silly,于是来匹配moods。然而得到的是字母t(在thing中),于是移到things中的t处,继续进行Perl正则表达式匹配。当引擎遇到第三个silly并且尽力匹配moods时,匹配成功,匹配***完成。当我们遇到通配符时回溯将变得更加重要。如果在同一Perl正则表达式中有几个通配符,且所有的通配符交织在一起,那么这里就有病态情形出现,在这种情形下,回溯变得非常昂贵。看如下表达式:$line=m/expression.*matching.*could.*be.*very.*expensive.*/

◆*代表一个通配符,它意味着"匹配任意字符(换行符除外)零次或多次"。这个过程有可能花很长时间;如果在未匹配过的字符串末尾有可能匹配,那么引擎将发狂地回溯。为得到这方面的更多信息,请留意关于通配符方面的原则。

如果读者发现类似于上面的情形,那么通配符需将Perl正则表达式分解成小功部分。换句话讲,简化自己的Perl正则表达式。

以上是"怎么实现Perl正则表达式匹配"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

表达式 正则 字符 读者 通配符 字符串 引擎 标量 内容 原则 同时 形式 模式 代码 情形 正在 篇文章 帮助 重要 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 智能科技公司是互联网公司吗 互联网中国科技 互联网的科技创新 互联网科技小贷 成都互联网科技公司 华中科技大学互联网 小马过河互联网科技 有木互联网科技 长亮科技互联网金融 湖北码尼互联网科技有限公司电话 荆州市昕露互联网络科技有限公司 互联网媒体平台算高科技产业 佛山市翊博互联网络科技有限公司 雨阳互联网卡科技有限公司 互联网科技资金流入 有人说阿里系是互联网科技企业 互联网风格科技公司名称 35岁以上互联网科技行业 武汉亿视互联网科技有限公司 互联网的科技 A股互联网金融科技公司 互联网科技的 卫星互联网科技股票 科技与互联网的利与弊 江苏南京365互联网科技 深圳艾果互联网通讯科技 本届互联网大会上的黑科技 艺电能源互联网科技有限公司招聘 互联网科技企业文化
0