第5章 正则表达式

前端之家收集整理的这篇文章主要介绍了第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等



原文链接:https://www.f2er.com/regex/359949.html

猜你在找的正则表达式相关文章