前端之家收集整理的这篇文章主要介绍了
第5章 正则表达式,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果把斜杠用做分隔符,你可以把m//写成//,不用写m)
为了有更好的颗粒度并提高效率,可以用小括号捕捉你特别想分离出来的部分。
每对小括号捕捉与小括号内的模式向匹配的子模式,小括号对 由左小括号的位置从左到右一次排序,对应那些子模式的字符串在匹配之后可以通过有编号的变量$1,$2,$3 等等获取:
Perl 的Unicode属性
[root@master Webqq]# cat t8.pl
if ("exasperate" =~ /e(.*)e/){print "\$1 is $1\n"};
[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 $1\n"};
[root@master Webqq]# perl t8.pl
$1 is xasp
这里使用了最小匹配版本.*?,往*上加一个?变成*?就成了反义词,现在如果
同一个起点有两个选择,它总是返回两者中较短的那个。
位置:
\A 断言不管字符串是什么,它只匹配开头。不过,^是传统的行开头和字符串开头的断言。
结尾 \z,\Z和$断言
边界:\b和\B 断言
\b 匹配任意边界,这个边界定义为任意两个\w和\W字符之间(任意顺序)的位置。
\B 匹配任意不是字边界的位置
如果顺序是\W\w,它就是字开始边界,如果顺序是\w\W,它就是字结束边界。
捕获和群集
模式允许你把模式的片段组合成子模式,并且保存那些匹配子模式的字符串,我们把第一个性质称为群集,第2个称为捕获
捕获
要捕获一个给后面使用的子字符串,请在匹配它的子模式周围放上小括号。第一对小
括号把它的子字符串存储在$1中,第2对存在$2中,以此类推。可以使用任意多的小括号,Perl 只是不停为你定义更多数量的变量代表那些捕获的字符串。
下面是一些例子:
/(\d)(\d)/ ## 捕获两位数字,把它们放到$1和$2中
/(\d+)/ ##捕获一位或更多位数字,把它们放到$1中
/(\d)+/ ## 匹配一位数字一次或多次,把最后一个放到$1中
捕获的字符串常被称做反向引用(backreference),因为向后指向捕获到的部分文本。
实际上我们有两种捕获这样的反向引用的方法。你前面看到了编了号的变量是在模式外面获取这些反向引用的方法,但是在模式中,它们是无效的。你必须使用\1,\2等