文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>perl5中文教程 05

perl5中文教程 05

时间:2007-03-09  来源:darrenshen

   
特殊字符 描述
() 模式内存
+ * ? {} 出现次数
^ $ \b \B
| 选项


14、指定模式定界符
   缺省的,模式定界符为反斜线/,但其可用字母m自行指定,如:
     m!/u/jqpublic/perl/prog1! 等价于/\/u\/jqpublic\/perl\/prog1/
   注:当用字母'作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特殊功能即不能使用。
15、模式次序变量
   在模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&。
     $string = "This string contains the number 25.11.";
     $string =~ /-?(\d+)\.?(\d+)/; # 匹配结果为25.11
     $integerpart = $1; # now $integerpart = 25
     $decimalpart = $2; # now $decimalpart = 11
     $totalpart = $&; # now totalpart = 25.11
四、模式匹配选项

 

选项 描述
g 匹配所有可能的模式
i 忽略大小写
m 将串视为多行
o 只赋值一次
s 将串视为单行
x 忽略模式中的空白


1、匹配所有可能的模式(g选项)
   @matches = "balata" =~ /.a/g; # now @matches = ("ba", "la", "ta")
   匹配的循环:
   while ("balata" =~ /.a/g) {
     $match = $&;
     print ("$match\n");
   }
   结果为:
     ba
     la
     ta
   当使用了选项g时,可用函数pos来控制下次匹配的偏移:
     $offset = pos($string);
     pos($string) = $newoffset;
2、忽略大小写(i选项)例
   /de/i 匹配de,dE,De和DE。
3、将字符串看作多行(m选项)
   在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。
4、只执行一次变量替换例
   $var = 1;
   $line = <STDIN>;
   while ($var < 10) {
     $result = $line =~ /$var/o;
     $line = <STDIN>;
     $var++;
   }
   每次均匹配/1/。
5、将字符串看作单行例
   /a.*bc/s匹配字符串axxxxx \nxxxxbc,但/a.*bc/则不匹配该字符串。
6、在模式中忽略空格
   /\d{2} ([\W]) \d{2} \1 \d{2}/x等价于/\d{2}([\W])\d{2}\1\d{2}/。
五、替换操作符
   语法为s/pattern/replacement/,其效果为将字符串中与pattern匹配的部分换成replacement。如:
     $string = "abc123def";
     $string =~ s/123/456/; # now $string = "abc456def";
   在替换部分可使用模式次序变量$n,如s/(\d+)/[$1]/,但在替换部分不支持模式的特殊字符,如{},*,+等,如s/abc/[def]/将把abc替换为[def]。
   替换操作符的选项如下表:

 

选项 描述
g 改变模式中的所有匹配
i 忽略模式中的大小写
e 替换字符串作为表达式
m 将待匹配串视为多行
o 仅赋值一次
s 将待匹配串视为单行
x 忽略模式中的空白

   注:e选项把替换部分的字符串看作表达式,在替换之前先计算其值,如:
     $string = "0abc1";
     $string =~ s/[a-zA-Z]+/$& x 2/e; # now $string = "0abcabc1"
六、翻译操作符
   这是另一种替换方式,语法如:tr/string1/string2/。同样,string2为替换部分,但其效果是把string1中的第一个字符替换为string2中的第一个字符,把string1中的第二个字符替换为string2中的第二个字符,依此类推。如:
     $string = "abcdefghicba";
     $string =~ tr/abc/def/; # now string = "defdefghifed"
   当string1比string2长时,其多余字符替换为string2的最后一个字符;当string1中同一个字符出现多次时,将使用第一个替换字符。
   翻译操作符的选项如下:

选项 描述
c 翻译所有未指定字符
d 删除所有指定字符
s 把多个相同的输出字符缩成一个

   如$string =~ tr/\d/ /c;把所有非数字字符替换为空格。$string =~ tr/\t //d;删除tab和空格;  $string =~ tr/0-9/ /cs;把数字间的其它字符替换为一个空格。

七、扩展模式匹配
   PERL支持PERL4和标准UNIX模式匹配操作所没有的一些模式匹配能力。其语法为:(?<c>pattern),其中c是一个字符,pattern是起作用的模式或子模式。
1、不存贮括号内的匹配内容
   在PERL的模式中,括号内的子模式将存贮在内存中,此功能即取消存贮该括号内的匹配内容,如/(?:a|b|c)(d|e)f\1/中的\1表示已匹配的d或e,而不是a或b或c。
2、内嵌模式选项
   通常模式选项置于其后,有四个选项:i、m、s、x可以内嵌使用,语法为:/(?option)pattern/,等价于/pattern/option。
3、肯定的和否定的预见匹配
   肯定的预见匹配语法为/pattern(?=string)/,其意义为匹配后面为string的模式,相反的,(?!string)意义为匹配后面非string的模式,如:
     $string = "25abc8";

$string =~ /abc(?=[0-9])/;
     $matched = $&; # $&为已匹配的模式,此处为abc,而不是abc8
4、模式注释
   PERL5中可以在模式中用?#来加注释,如:
     if ($string =~ /(?i)[a-z]{2,3}(?# match two or three alphabetic characters)/ {
       ...
     }

相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载