第5章 正则表达式

来源:互联网 发布:程序员怎么自学 编辑:程序博客网 时间:2024/05/21 21:40
<pre name="code" class="sql"> 下面的就是这些字符:\ | ( ) { ^ $ * + ? .反斜杠本身是一个元字符,因此如果你要匹配一个文本的反斜杠,你要在反斜杠前面放一个反斜杠:\\反斜杠(平时正常) 的字母数字字符作用相反,它把该文本字符变成某些特殊的东西。无论什么时候你看到下面的双字符序列:/(bar){3}/  这样将和"barbarbar"匹配  redis01:/root/big# cat a1.pl $var='barbarbar11';if ($var =~/(bar){3}/){print "11111\n";};redis01:/root/big# perl a1.pl111115.2  模式匹配操作符:m// 用于匹配一个模式 (如果把斜杠用做分隔符,你可以把m// 写成//,不用写m.)$haystack =~ m/meedle/ # 匹配一个简单模式$haystack =~ /needle/ # 一样的东西redis01:/root/big# cat a2.pl $var='meedlexx1';if ($var =~ m/meedle/){print "11111111\n"};if ($var =~ /meedle/){print "22222222\n"};redis01:/root/big# perl a2.pl 1111111122222222每次成功匹配了一个模式(包括替换中的模式),操作符都会把变量$`, $&和$' 分配设为为匹配内容左边内容,匹配的内容和匹配内容的右边的文本。这个功能对于把字符串分解为组件很有用:为了有更好的颗粒度和提高效率,你可以用圆括弧捕捉你特别想分离出来的部分. 每对圆括弧捕捉与圆括弧内的模式相匹配的子模式。圆括弧有左圆括弧的位置从左到右依次排序:对应那些子模式的子字串在匹配之后可以通过顺序的变量$1,$2,$3 等等获得:$`,$&,$' 和排序的变量都是全局变量,它们隐含地局部化为属于此闭合的动态范围。它们的存在直到下一次成功的匹配或者当前范围的结尾,以先到者为准。一旦Perl 认为你的程序的任意部分需要$`,$&或$',它就会为每次模式匹配提供这些东西。这样做会微微减慢你的程序的速度。Perl 同样还利用类似的机制生成$1,$2 等等,因此你也会为每个包含捕捉圆括弧的模式付出一些代价。5.2.1  模式修饰词:修饰词                         含义/i                              忽略字母的大小写(大小写无关)/s                             令.匹配换行符并且忽略不建议使用的$*变量通常.元字符"." 匹配除了换行符以外的任何单个字符,因为它的传统含义是匹配一行内的某个字符。不过,带有/s时,"." 元字符也可以匹配一个换行符,因为你已经告诉Perl 忽略该字符串可能包含多个换行符的情况redis01:/root/big# cat a3.pl $var="abc\nefg\n123";if ($var =~/abc.efg/){print "111111111\n"};if ($var =~/abc.efg/s){print "22222222\n"};redis01:/root/big# perl a3.pl 22222222让.号可以匹配 \n/m                        令^和$匹配下一个嵌入的\n5.2.2 m// 操作符(匹配)m// 操作符搜索变量EXPR 里面的子串,查找PATTERN 。如果使用/或?做分隔符,那么开头的m是可选的。? 表示只匹配前者一次:5.2.3 s/// 操作符(替换)5.2.3.1 顺便修改一下子串:s/^\s+//; # 丢弃开头的空白s/\s+$//; # 丢弃结尾的空白s/\s+/ /g; # 压缩内部的空白5.3  元字符和元符号:到现在你应该已经看到这样的事实,就是这些符号并不是普通的函数调用或者算术操作符,正则表达式本身就是嵌入Perl的小型语言。5.3.1  元字符表:符号      原子性                       含义\...       变化                        反逃逸下一个非字母数字字符,转义下一个字母数字(可能)...|...    否                          可选(匹配前者或者后者)(...)      是                           分组(当作单元对待)至于量词,我们会在它们自己的章节里详细描述,量词表示前导的原子(也就是说,单字符或者分组)应该匹配的次数,它们列在表5-5中。表5-5 ,正则量词:量词                  原子性                            含义*                      否                               匹配0或者更多次数(最大)+                      否                               匹配或者更多次数(最大)?                     否                               匹配1或者0次5.3.3  通配元符号:点号元字符常和量词一起使用。.* 匹配尽可能多的字符,而.*? 匹配尽可能少的字符。5.4.3  Unicode 属性:


                                             
0 0