⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perl 语言-perl 中文教程(第六章).htm

📁 perl的中文教程
💻 HTM
📖 第 1 页 / 共 3 页
字号:
        <TR>
          <TD class=myFont vAlign=top width=157><TT>()</TT></TD>
          <TD class=myFont vAlign=top width=198>模式内存</TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=157><TT>+ * ? {}</TT></TD>
          <TD class=myFont vAlign=top width=198>出现次数</TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=157><TT>^ $ \b \B</TT></TD>
          <TD class=myFont vAlign=top width=198>锚</TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=157><TT>|</TT></TD>
          <TD class=myFont vAlign=top width=198>选项</TD></TR></TBODY></TABLE>
      <P><A name=14、指定模式定界符>14、指定模式定界符</A> <BR>&nbsp;&nbsp; 
      缺省的,模式定界符为反斜线/,但其可用字母m自行指定,如:<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      m!/u/jqpublic/perl/prog1! 等价于/\/u\/jqpublic\/perl\/prog1/<BR>&nbsp;&nbsp; 
      注:当用字母'作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特殊功能即不能使用。<BR><A 
      name=15、模式次序变量>15、模式次序变量</A> <BR>&nbsp;&nbsp; 
      在模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&amp;。<BR>&nbsp;&nbsp;&nbsp;&nbsp; $string 
      = "This string contains the number 25.11.";<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $string =~ /-?(\d+)\.?(\d+)/; # 匹配结果为25.11<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $integerpart = $1; # now $integerpart = 25<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $decimalpart = $2; # now $decimalpart = 11<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $totalpart = $&amp;; # now totalpart = 25.11<BR><BR><A 
      name=四、模式匹配选项>四、模式匹配选项</A></P>
      <TABLE class=myFont borderColor=forestgreen cellSpacing=0 cellPadding=2 
      width="50%" border=1>
        <TBODY>
        <TR>
          <TD vAlign=top width=144><B>选项</B></TD>
          <TD vAlign=top width=288><B>描述</B></TD></TR>
        <TR>
          <TD vAlign=top width=144><TT>g</TT></TD>
          <TD vAlign=top width=288>匹配所有可能的模式</TD></TR>
        <TR>
          <TD vAlign=top width=144><TT>i</TT></TD>
          <TD vAlign=top width=288>忽略大小写</TD></TR>
        <TR>
          <TD vAlign=top width=144><TT>m</TT></TD>
          <TD vAlign=top width=288>将串视为多行</TD></TR>
        <TR>
          <TD vAlign=top width=144><TT>o</TT></TD>
          <TD vAlign=top width=288>只赋值一次</TD></TR>
        <TR>
          <TD vAlign=top width=144><TT>s</TT></TD>
          <TD vAlign=top width=288>将串视为单行</TD></TR>
        <TR>
          <TD vAlign=top width=144><TT>x</TT></TD>
          <TD vAlign=top width=288>忽略模式中的空白</TD></TR></TBODY></TABLE>
      <P><A name=1、匹配所有可能的模式(g选项)>1、匹配所有可能的模式(g选项)</A> <BR>&nbsp;&nbsp; @matches 
      = "balata" =~ /.a/g; # now @matches = ("ba", "la", "ta")<BR>&nbsp;&nbsp; 
      匹配的循环:<BR>&nbsp;&nbsp; while ("balata" =~ /.a/g) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp; $match = $&amp;;<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      print ("$match\n");<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
      结果为:<BR>&nbsp;&nbsp;&nbsp;&nbsp; ba<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      la<BR>&nbsp;&nbsp;&nbsp;&nbsp; ta<BR>&nbsp;&nbsp; 
      当使用了选项g时,可用函数pos来控制下次匹配的偏移:<BR>&nbsp;&nbsp;&nbsp;&nbsp; $offset = 
      pos($string);<BR>&nbsp;&nbsp;&nbsp;&nbsp; pos($string) = $newoffset;<BR><A 
      name=2、忽略大小写(i选项)例>2、忽略大小写(i选项)例</A> <BR>&nbsp;&nbsp; /de/i 
      匹配de,dE,De和DE。<BR><A name=3、将字符串看作多行(m选项)>3、将字符串看作多行(m选项)</A> 
      <BR>&nbsp;&nbsp; 在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。<BR><A 
      name=4、只执行一次变量替换例>4、只执行一次变量替换例</A> <BR>&nbsp;&nbsp; $var = 
      1;<BR>&nbsp;&nbsp; $line = &lt;STDIN&gt;;<BR>&nbsp;&nbsp; while ($var &lt; 
      10) { <BR>&nbsp;&nbsp;&nbsp;&nbsp; $result = $line =~ 
      /$var/o;<BR>&nbsp;&nbsp;&nbsp;&nbsp; $line = &lt;STDIN&gt;; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; $var++;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; 
      每次均匹配/1/。<BR><A name=5、将字符串看作单行例>5、将字符串看作单行例</A> <BR>&nbsp;&nbsp; 
      /a.*bc/s匹配字符串axxxxx \nxxxxbc,但/a.*bc/则不匹配该字符串。<BR><A 
      name=6、在模式中忽略空格>6、在模式中忽略空格</A> <BR>&nbsp;&nbsp; /\d{2} ([\W]) \d{2} \1 
      \d{2}/x等价于/\d{2}([\W])\d{2}\1\d{2}/。<BR><BR><A name=五、替换操作符>五、替换操作符</A> 
      <BR>&nbsp;&nbsp; 
      语法为s/pattern/replacement/,其效果为将字符串中与pattern匹配的部分换成replacement。如:<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $string = "abc123def";<BR>&nbsp;&nbsp;&nbsp;&nbsp; $string =~ s/123/456/; 
      # now $string = "abc456def";<BR>&nbsp;&nbsp; 
      在替换部分可使用模式次序变量$n,如s/(\d+)/[$1]/,但在替换部分不支持模式的特殊字符,如{},*,+等,如s/abc/[def]/将把abc替换为[def]。<BR>&nbsp;&nbsp; 
      替换操作符的选项如下表:</P>
      <TABLE class=myFont borderColor=forestgreen cellSpacing=0 cellPadding=2 
      width="60%" border=1>
        <TBODY>
        <TR>
          <TD vAlign=top width=91><B>选项</B></TD>
          <TD vAlign=top width=499><B>描述</B></TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>g</TT></TD>
          <TD vAlign=top width=499>改变模式中的所有匹配</TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>i</TT></TD>
          <TD vAlign=top width=499>忽略模式中的大小写</TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>e</TT></TD>
          <TD vAlign=top width=499>替换字符串作为表达式</TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>m</TT></TD>
          <TD vAlign=top width=499>将待匹配串视为多行</TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>o</TT></TD>
          <TD vAlign=top width=499>仅赋值一次</TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>s</TT></TD>
          <TD vAlign=top width=499>将待匹配串视为单行</TD></TR>
        <TR>
          <TD vAlign=top width=91><TT>x</TT></TD>
          <TD vAlign=top width=499>忽略模式中的空白</TD></TR></TBODY></TABLE>
      <P>&nbsp;&nbsp; 
      注:e选项把替换部分的字符串看作表达式,在替换之前先计算其值,如:<BR>&nbsp;&nbsp;&nbsp;&nbsp; $string = 
      "0abc1";<BR>&nbsp;&nbsp;&nbsp;&nbsp; $string =~ s/[a-zA-Z]+/$&amp; x 2/e; 
      # now $string = "0abcabc1"<BR><BR><A name=六、翻译操作符>六、翻译操作符</A> 
      <BR>&nbsp;&nbsp; 
      这是另一种替换方式,语法如:tr/string1/string2/。同样,string2为替换部分,但其效果是把string1中的第一个字符替换为string2中的第一个字符,把string1中的第二个字符替换为string2中的第二个字符,依此类推。如:<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $string = "abcdefghicba";<BR>&nbsp;&nbsp;&nbsp;&nbsp; $string =~ 
      tr/abc/def/; # now string = "defdefghifed"<BR>&nbsp;&nbsp; 
      当string1比string2长时,其多余字符替换为string2的最后一个字符;当string1中同一个字符出现多次时,将使用第一个替换字符。<BR>&nbsp;&nbsp; 
      翻译操作符的选项如下:<BR></P>
      <TABLE class=myFont borderColor=forestgreen cellSpacing=0 cellPadding=2 
      width="80%" border=1>
        <TBODY>
        <TR>
          <TD vAlign=top width=69>选项</TD>
          <TD vAlign=top width=447>描述</TD></TR>
        <TR>
          <TD vAlign=top width=69><TT>c</TT></TD>
          <TD vAlign=top width=447>翻译所有未指定字符</TD></TR>
        <TR>
          <TD vAlign=top width=69><TT>d</TT></TD>
          <TD vAlign=top width=447>删除所有指定字符</TD></TR>
        <TR>
          <TD vAlign=top width=69><TT>s</TT></TD>
          <TD vAlign=top width=447>把多个相同的输出字符缩成一个</TD></TR></TBODY></TABLE>
      <P>&nbsp;&nbsp; 如$string =~ tr/\d/ /c;把所有非数字字符替换为空格。$string =~ tr/\t 
      //d;删除tab和空格;&nbsp; $string =~ tr/0-9/ /cs;把数字间的其它字符替换为一个空格。<BR><BR><A 
      name=七、扩展模式匹配>七、扩展模式匹配 </A><BR>&nbsp;&nbsp; 
      PERL支持PERL4和标准UNIX模式匹配操作所没有的一些模式匹配能力。其语法为:(?&lt;c&gt;pattern),其中c是一个字符,pattern是起作用的模式或子模式。<BR><A 
      name=1、不存贮括号内的匹配内容>1、不存贮括号内的匹配内容</A> <BR>&nbsp;&nbsp; 
      在PERL的模式中,括号内的子模式将存贮在内存中,此功能即取消存贮该括号内的匹配内容,如/(?:a|b|c)(d|e)f\1/中的\1表示已匹配的d或e,而不是a或b或c。<BR><A 
      name=2、内嵌模式选项>2、内嵌模式选项</A> <BR>&nbsp;&nbsp; 
      通常模式选项置于其后,有四个选项:i、m、s、x可以内嵌使用,语法为:/(?option)pattern/,等价于/pattern/option。<BR><A 
      name=3、肯定的和否定的预见匹配>3、肯定的和否定的预见匹配<BR></A>&nbsp;&nbsp; 
      肯定的预见匹配语法为/pattern(?=string)/,其意义为匹配后面为string的模式,相反的,(?!string)意义为匹配后面非string的模式,如:<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      $string = "25abc8";<BR>&nbsp;&nbsp;&nbsp;&nbsp; $string =~ /abc(?=[0-9])/; 
      <BR>&nbsp;&nbsp;&nbsp;&nbsp; $matched = $&amp;; # 
      $&amp;为已匹配的模式,此处为abc,而不是abc8<BR><A name=4、模式注释>4、模式注释</A> <BR>&nbsp;&nbsp; 
      PERL5中可以在模式中用?#来加注释,如:<BR>&nbsp;&nbsp;&nbsp;&nbsp; if ($string =~ 
      /(?i)[a-z]{2,3}(?# match two or three alphabetic characters)/ 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
      } </P></TD></TR></TBODY></TABLE>
<DIV align=center></DIV>
<DIV align=center><BR></DIV>
<DIV align=center><SPAN class=myFont><A 
href="http://www.sun126.com/perl5/perl5-5.htm">上页</A> <A 
href="http://www.sun126.com/perl5/perl5-7.htm">下页</A> <A 
href="http://www.sun126.com/perl5/perl5index.htm">回目录</A> <A 
href="http://www.sun126.com/perl5/perl5-6.htm#a"><FONT face="Arial, 宋体">Go 
Top</FONT></A></SPAN><BR><BR></DIV>
<TABLE height=50 cellSpacing=0 cellPadding=0 width="100%" bgColor=#000000 
border=0>
  <TBODY>
  <TR>
    <TD bgColor=#cccc99 height=4>
      <DIV align=center><IMG height=4 src="" width=4></DIV></TD></TR>
  <TR>
    <TD height=50>
      <DIV align=center><FONT class=myfont size=2><SPAN class=myfont><FONT 
      color=#99cc99><A href="http://www.sun126.com/bbs/ccb/index.cgi"><FONT 
      color=#99cc99>中国CCB论坛</FONT></A>  整理 麻辣 
      2003.7.10</FONT></SPAN></FONT><FONT class=myfont color=#99cc99 
      size=2><SPAN class=myfont><FONT 
      color=#99cc66><BR></FONT></SPAN></FONT><SPAN class=myfont><FONT 
      class=myfont><SPAN class=myfont><FONT face="Arial, Helvetica, sans-serif" 
      color=#99cc99>&copy; 2000 
      http://www.sun126.com</FONT></SPAN></FONT></SPAN></DIV></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -