Perl学习笔记 No.8

本文详细介绍正则表达式的各种应用场景和技术细节,包括特殊字符的使用、修饰符的作用、匹配变量的功能以及数量词的含义等。通过实际案例帮助读者更好地理解和掌握正则表达式的用法。

正则表达式的应用

1.   //只是m//的简写,/http://///不易阅读,可以写成 m{http://}或者m%http://%

2.   正斜线不是元字符,如果它不是分隔符,则不需在前面使用反斜线

 

3.   /fred/i,表示无视大小写,可以匹配fred,FRED,Fred,fRed等

4.   .不能匹配换行符,但是加上s后,即能匹配所有字符,比如/f.*/s,匹配所有以f开头的字符串

5.   x允许模式中使用空格或者Tab来方便阅读理解,也就是说,将忽略模式中的空格和制表符,比如/ -? /d+ /.? /d* /x

6.   以上3个可选修饰符可以同时使用,并且不限制顺序,six,xis,isx,xsi,ixs,sxi

7.   还有其他修饰符...=.=

8.    /^fred/,表示在字符串开头匹配,/fred$/表示在结尾匹配...字符串前4个字符,和字符串的后4个字符

9.    /^/s*$/ 常见用法,可以匹配空行,如果不用锚定符,则能匹配任意行

10.  词界锚定,/b,是针对单词使用的.如//bfred/b/可以匹配上单词 fred,但不能匹配 frederick,alfred,man fred mann.类似于"全字匹配"

11.  /b,可以只用一个,嗯,效果大家应该都明白的

12.  /B,表示非词界锚定,//bfred/B/,将不能匹配fred

13.  =~,含义是这个模式默认将对$_进行匹配,但此时将对左边的字符串进行匹配
14.  模式可以使用参数内插,甚至使用@AGRV来获得

15. 

16.   这些匹配变量的值(保存在内存中)会保持不变,直到下一个模式成功匹配为止

17.   也就是说,一个没有匹配成功的模式将不会改变内存中相应的值,但一个匹配上的模式将重写此内存 .这明确的告诉你 ,不要随意的使用这些变量 ,除非明确知道它们匹配正确;否则,你可能得到上个模式匹配的结果.玩内存是不好的...

18.   所以模式匹配对用于条件判断或while中,匹配之后,尽快使用

19.  $&,$'与$`...perl是符号语言...=.=

20.  那些匹配上的字符串将自动储存在$&中

21.  $&为整个匹配部分(模式中有啥,他有啥),不同于$x,$x仅仅只是模式中相对应的()块的值

22.  $`是$&没有的前面的部分,$'是$&没有的后面的部分

 

23.  如果你使用了这三个自动匹配变量中的任意一个,无论在程序的什么地方,其它地方的正则表达式的运行数度会变慢一些

24.  所以尽量不用...

25.  其他数量词表示,/a{5,15}/,表示匹配5到15个a...实际上只要5个以上就能匹配,但是如果输出最多只能15个. 如果 a 出现了 3 次 ,则次数太少,而不能匹配上;如果出现 5 次 ,则匹配上了 ;如果出现 10 次,仍然匹配上.如果出现 20 次,仍将匹配上,前 15 个将匹配上.

26.  优先级:

 (1). 在此优先级表的最顶端是括号 :( ),在分组和引用内存值的时候使用.括号内部的任何部分比括号外的部分结合更紧密;
 (2). 第二级是数量词.这里有星号 (*), 加号(+), 问号(?),以及由花括号表示的数量词,如{5,15} , {3, } , {5}等 .它们通常和前一项元素结合.
 (3). 第三级的是锚定和序列(sequence ) 锚定包括(^) 表明字符串的开头,($) 表明结尾,(/b) 词界符,(/B) 非词界符.序列(一个元素紧接着一个元素)实际上是一种操作 ,虽然它没有使用元字符.这段话的含义是一个单词中的字母结合更紧密 ,就像锚定紧贴字母一样.
 (4).优先级最低的是竖线( |),表示或.由于其优先级最低,它通常将模式划分成几个部分 .它在优先级最底端是因为我们希望像|/fred|barney/里面的字母比或(|) 结合更紧密. 如果或(| )的优先级比序列的优先级更高, 那么,上述模式的含义是匹配 fre,
接着是 d 或者 b , 然后是 arney.因此,或( |)的优先级最低 ,字母序列的优先级要高些 .

27.  一个模式匹配测试程序

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值