千家信息网

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

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要为大家展示了"怎么实现Perl正则表达式匹配",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"怎么实现Perl正则表达式匹配"这篇文章吧。Perl
千家信息网最后更新 2025年01月18日怎么实现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安全错误 数据库的锁怎样保障安全 服务器本地连接一直断开 软件开发签约协议 把图片存到数据库中 it服务和软件开发有什么不同 规模大的浪潮服务器店面电话多少 支付宝网络技术有限公司是做啥的 如何打开低版本数据库文件 赞扬软件开发人员的文章 计算机网络技术 培养目标 审计局网络安全风险 软件开发人员制服 网络安全员有前途吗 网络安全创新应用大赛 服务器QQ机器人对接命令 关于数据库讲座心得体会 绝地求生服务器排名怎么看 脏小豆的服务器第一集 网络安全从我做起初中 网络安全初级适合书籍 青海电力时间同步服务器 静安区数字视频系统服务器 科技金融 网络安全 演化模式是软件开发模式吗 上海正规软件开发项目信息 eshop连接mysql数据库 网络安全软件市场状况 审计局网络安全风险 药盟互联网科技收费吗 msq数据库最新版 数据库创建表时设置字段外键约束
0