Chinaunix首页 | 论坛 | 博客
  • 博客访问: 326155
  • 博文数量: 72
  • 博客积分: 1730
  • 博客等级: 上尉
  • 技术积分: 743
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-27 18:49
文章分类

全部博文(72)

文章存档

2012年(72)

我的朋友

分类: LINUX

2012-07-04 10:03:54

learning perl :
1 : perl里面 的 花括号是不能省略的:
    

点击(此处)折叠或打开

  1. $_ = "fred gahdaj_ barney";
  2. if (/fred \w+ barney/)
  3.     print "it matched!\n";
    报错:syntax error at ./perl line 5, near ")  print"
    正确的是:

点击(此处)折叠或打开

  1. $_ = "fred gaggdt_ barney";
  2. if (/fred \w+ barney/){
  3.    print "it matched";
  4. }
关于可选量词的误解:
   注意: 量词 . + ? * 等都是与前一个字符一起来进行理解;
   例如/you_?me/则匹配 you_me youme ;
       /you_+me/则匹配 you_me you___me 等

       /you*me/则匹配  yome 等等;
   ?:匹配前一个字符出现或者不出现;(包括已出现的字符的次数而不是这个字符另外出现的次数)
   + :匹配前一个字符出现一次及以上;(包括这个已出现的字符的次数,而不是这个字符另外出现的次   数)
   * :出现任意次数;




The 6th chapter
    the regular Expressions
    正则表达式在 perl里叫做: 模式
    模式分组:() ;(通过使用括号进行模式分组;)
The 7th chapter
   Matching with the regular Expressions
   1  m/ /  模式匹配形式
      通常的/ /是其的特殊情况的简写。
      可以使用随意的定界符;这点与qw//一样。(如果你采用/作为定界符,你可以省略m,直接写为// 即ok)
   2  可选修饰符(开关)
      通常跟随在模式(正则表达式)后面用于改变模式的默认的行为。
      如/i:大小写无关的匹配
      /yes/i
      /s用来匹配任意字符,主要用来进行对.进行 包括 换行符的匹配(匹配一行中包括的换行符!);
      /x用于任意加上空白字符(则原来的空白与制表符都失去了含义)
   3  锚位: ^ 和 $ 用于 句首和句尾的 匹配;
      单词边界锚位: \b;非但次边界锚位: \B (单词边界锚位非常有用!)
   4 绑定操作符: =~
   5 模式(正则表达式)串中的内插;
   6 捕获变量
   7 通用量词:{m,n}
   8 优先级
   9  模式测试程序:
    

点击(此处)折叠或打开

  1. #!/usr.bin/perl -w
  2. use 5.010;
  3. while (<>){
  4.    chomp;
  5.    if (/YOUR PATTERN HERE/){
  6.       print "Matched: $`<$&>$'";
  7.    }else{
  8.       print "no match!\n";
  9.    }
  10. }
     这个测试模式段给我我们一个很好的改写的基础模版。。。
 

点击(此处)折叠或打开

  1. #!/usr/bin/perl -w
  2. use 5.010;
  3. while (<>){
  4.    chomp;
  5.    if (
  6.        (\b\w+a\b)
  7.        (.{0,5})
  8.         !xs){
  9.        print "The 1st is $1;\n
  10.        The 2nd is $2;\n ";
  11.        }
  12. }
   这是习题的答案:
       1 .{0,5} :点号 代表的是连接的意思??不是的,显然那点号在 模式集 中代表的任意的一个字符
          (当然\n除外),后面{0,5}代表的是通用量词。。
       2  注意这里我们采用了 m! !作为模式,并且采用了!作为 模式分界符。。
       3  xs代表的是 组合选项可选修饰符;x  代表 忽略空白,s代表 匹配任意字符(.本来是无法匹配
          换行的,但是再加s 可选修饰符后则可以匹配 换行。)
       4  注意我们使用了$1和$2进行捕获变量的引用操作。
          自己本来犯了一个错吴:
          if (m!
              (\b\w+a\b)
              (.{0,5})
                !xs){
               print "the 1st is ‘g{1}’;\n the 2nd is ‘g{2}’";  

          }
          则结果为 :The 1st memory is 'g{1}';
          我们所说的 反向引用必须是在 模式中使用的
          例如:模式如下:
              m!
              (\b\w+a\b)
              (.{0,5})
              g{1}
              !xs


     
  
     




阅读(1657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~