网站首页 美食营养 游戏数码 手工爱好 生活家居 健康养生 运动户外 职场理财 情感交际 母婴教育 时尚美容

如何理解perl中的模式分组

时间:2024-10-16 13:12:33

1、Step1:特殊符号的特殊意义:在正则表达式中,有一些符号有特定的意义和功能,先在这里简单的总结一下。第一个是“*”号:“*”号我们一般理解为乘号,它的功能是匹趺谄菇明配0次或多次前面的字符。如/hi*/会匹配h、hi、hiiii等。第二个是“.”号:我们称之为点号,它可以代表任意字符(非字符串)。如/h./会匹配ha,hh,hb等。第三个是“?”号:问号代表一个字符可有可无。如/hello?/,则会匹配hell,hello,helloabc,hellabc。第四个是“+”号:加号代码一个字符出现1次及1次以上。如/hello+/,则会匹配hello,hellooo。

2、Step2:什么是模式分组?理解了以上4个特殊符号的意义,我们基本上可以判断一些简单的模式匹配了。但刚才谈到的仅仅是字符的匹配,但如果要匹配字符串呢,比如要匹配一句话中是否包括了basketball这个单词,该怎么做呢?我们可以用括号把这个词括起来,括号中的内容就相当于一个整体了。如/(word)+/可以匹配wordwrod。圆括号的作用就是对字符串分组。这样我们就可以理解模式分组的含义了。

3、Step3:什么是反向引用?如果要引用模式分组中的内容,称之为反向引用。反向引用的写法是在“\”后面接上数字编号,相应的数字表示对应的模式分组。如模式/(ac)(cd)\2\1/用于匹配字符串accdcdac。

4、Step4:反向引用的写法Perl 5.10开始支持一种新的反向引用的写法,刚才的写是是旧的格式。新的格式是\g{N},其中的N是想要反向引吹涡皋陕用的组号。下面举个例子说明新旧写法的不同。假如要匹配 abcdede123fg,可以写成/(de)\1/,但该模式会匹配出dedeabc等其它的在de之后没有连接123的字符,当然我们也可以这样写/(de)\123/,如果这样写的话,perl会认为要引用的数号是123,则会发生错误。新的写法是/(de)\g{1}23/,这样,就完全正确匹配所要的字符串了。

5、以上的知识点仅仅是perl正则表达式的冰山一角,建议大家在学习时,边学边实践,认真思考为什么会是这样,相信努力之后,你一定会深刻理解。欢迎大家多多交流。

© 海能知识库