• Perl中的正则表达


      前几天用到了Perl语言,主要看了一下Perl中的正则表达式,在各种网页语言中,正则表达式在处理字符串的时候十分有用,所以这里就简单说一下在Perl中正则表达式的应用。

      先上代码

     1 #!/usr/bin/perl -w
     2 #use utf8;
     3 #use encoding "gb2312";
     4 
     5 open(DATA,"<test2.txt") or die "read error";
     6 
     7 open(OUT,">outfile.txt") or die "write error";
     8 %array=(); 
     9 while ($string =<DATA>){
    10   
    11   if ($string =~ /s.*.m/) {
    12     $string =~ s/s.*.m//g;
    13     
    14   }
    15   chomp($string);     #去掉换行符
    16     foreach $character(split / /,$string){
    17     if ($character =~ //d$/)
    18     {
    19         $array{$character}++;
    20     }#code
    21   }
    22 }
    23 print OUT "result:
    ";
    24 @character = sort {$array{$b} <=> $array{$a} }( keys %array);
    25 foreach $character (@character){
    26     print   OUT "$character => $array{$character}
    ";
    27 }

      简单说一下就是,读取文件内容到字符串,去掉换行符,按空格分割(spilt),匹配到以s开头,以m结束的字符串,然后以空串替换之(删除),匹配到以d结束的字符串,存到数组中,最后按降序输出到文件。实际就是删除s开头,m结尾的单词,找到所有以d结束的单词,并统计。

      这里使用关联数组进行统计,可以使用任意标量(keys)作为索引值,便于以后检索。

      值得注意的是,*是贪婪匹配,它会尽可能地向后匹配直到匹配成功,要想尽可能少地匹配,需要

      

    $string =~ s/s.*?.m//g
    

      

      正则表达式

      (1)三种形式

       匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)

      替换:s/<pattern>;/<replacement>;/

      转化:tr/<pattern>;/<replacemnt>;/

      这三种形式和“=~”或“!~”搭配使用,分别表示匹配和不匹配,在上述代码中用到了匹配符号。

         (2)常用模式(pattern)  

    . 匹配除换行符以外的所有字符

    x? 匹配 0 次或一次 x 字符串

    x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数

    x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数

    .* 匹配 0 次或一次的任何字符

    .+ 匹配 1 次或多次的任何字符

    {m} 匹配刚好是 m 个 的指定字符串

    {m,n} 匹配在 m个 以上 n个 以下 的指定字符串

    {m,} 匹配 m个 以上 的指定字符串

    [] 匹配符合 [] 内的字符

    [^] 匹配不符合 [] 内的字符

    [0-9] 匹配所有数字字符

    [a-z] 匹配所有小写字母字符

    [^0-9] 匹配所有非数字字符

    [^a-z] 匹配所有非小写字母字符

    ^ 匹配字符开头的字符

    $ 匹配字符结尾的字符

    d 匹配一个数字的字符,和 [0-9] 语法一样

    d+ 匹配多个数字字符串,和 [0-9]+ 语法一样

    D 非数字,其他同 d

    D+ 非数字,其他同 d+

    w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样

    w+ 和 [a-zA-Z0-9]+ 语法一样

    W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样

    W+ 和 [^a-zA-Z0-9]+ 语法一样

    s 空格,和 [ f] 语法一样

    s+ 和 [ f]+ 一样

    S 非空格,和 [^ f] 语法一样

    S+ 和 [^ f]+ 语法一样

     匹配以英文字母,数字为边界的字符串

    B 匹配不以英文字母,数值为边界的字符串

    a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串

    abc 匹配含有 abc 的字符串

      在匹配中要注意转义字符的使用。正则表达式在处理字符时给我们提供很多便利,这里只是介绍了最简单的使用,并且发现字符串中隐含的模式进行匹配也是需要我们注意的,以后还要在使用中多多地学习。

  • 相关阅读:
    js查找字符串中重复的子字符串
    未知盒子宽高使盒子垂直水平居中
    标准盒模型和怪异盒模型的差异
    Vue练习(跑马灯效果)
    node后端中MVC与前端中的MVVM之间的区别
    ES6中对Promise解析
    ES6中对箭头函数的使用
    ES6对map解析
    ES6中对Set解析
    ES6解构赋值全了解
  • 原文地址:https://www.cnblogs.com/wktwj/p/4052827.html
Copyright © 2020-2023  润新知