加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

第5章 正则表达式

发布时间:2020-12-14 00:59:24 所属栏目:百科 来源:网络整理
导读:如果把斜杠用做分隔符,你可以把m//写成//,不用写m)为了有更好的颗粒度并提高效率,可以用小括号捕捉你特别想分离出来的部分。每对小括号捕捉与小括号内的模式向匹配的子模式,小括号对 由左小括号的位置从左到右一次排序,对应那些子模式的字符串在匹配之后可以
如果把斜杠用做分隔符,你可以把m//写成//,不用写m)

为了有更好的颗粒度并提高效率,可以用小括号捕捉你特别想分离出来的部分。

每对小括号捕捉与小括号内的模式向匹配的子模式,小括号对 由左小括号的位置从左到右一次排序,对应那些子模式的字符串在匹配之后可以通过有编号的变量$1,$2,$3 等等获取:

Perl 的Unicode属性

[root@master Webqq]# cat t8.pl 
if ("exasperate" =~ /e(.*)e/){print "$1 is $1n"};
[root@master Webqq]# perl t8.pl 
$1 is xasperat

.* 匹配xasperat,可以匹配的最长的字符串。(它还把这个值存储在$1中)

尽管还有一个段一些的匹配可用,但是一个贪婪的匹配是不会理会的。

如果在同一个起点上有两个可供选择的匹配项,它总是返回两者之间较长的。

. 点号 匹配所有的字符,除换行符外 

*  表示0次或多次 




和下面这条语句相比:

[root@master Webqq]# perl t8.pl 
$1 is xasp
[root@master Webqq]# cat t8.pl 
if ("exasperate" =~ /e(.*?)e/){print "$1 is $1n"};
[root@master Webqq]# perl t8.pl 
$1 is xasp



这里使用了最小匹配版本.*?,往*上加一个?变成*?就成了反义词,现在如果

同一个起点有两个选择,它总是返回两者中较短的那个。


位置:

A 断言不管字符串是什么,它只匹配开头。不过,^是传统的行开头和字符串开头的断言。



结尾  z,Z和$断言


边界:b和B 断言


b 匹配任意边界,这个边界定义为任意两个w和W字符之间(任意顺序)的位置。

B 匹配任意不是字边界的位置


如果顺序是Ww,它就是字开始边界,如果顺序是wW,它就是字结束边界。


捕获和群集


模式允许你把模式的片段组合成子模式,并且保存那些匹配子模式的字符串,我们把第一个性质称为群集,第2个称为捕获


捕获

要捕获一个给后面使用的子字符串,请在匹配它的子模式周围放上小括号。第一对小

括号把它的子字符串存储在$1中,第2对存在$2中,以此类推。可以使用任意多的小括号,Perl 只是不停为你定义更多数量的变量代表那些捕获的字符串。



下面是一些例子:

/(d)(d)/  ## 捕获两位数字,把它们放到$1和$2中

/(d+)/     ##捕获一位或更多位数字,把它们放到$1中

/(d)+/     ## 匹配一位数字一次或多次,把最后一个放到$1中




捕获的字符串常被称做反向引用(backreference),因为向后指向捕获到的部分文本。


实际上我们有两种捕获这样的反向引用的方法。你前面看到了编了号的变量是在模式外面获取这些反向引用的方法,但是在模式中,它们是无效的。你必须使用1,2等



(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读