美文网首页
用正则表达式处理文本

用正则表达式处理文本

作者: 食梦狸猫 | 来源:发表于2019-03-26 11:28 被阅读0次

    利用正则表达式的模式定位部分字符串并做出相应的修改。
    m//模式匹配 是查找功能。
    s///就是查找并替换的功能

    s/barney/fred/;
    #把barney替换为fred
    
    • 用/g进行全局替换
      s///只会进行一次替换。
      s///g会进行所有可能的,不重复的替换

    • 无损替换
      需要同时保留原始字符串和替换后的字符串。
      /r修饰符保留原来字符串变量中的值不变,把替换结果作为替换操作的返回值返回。

    my $copy = $original =~ s/\d +ribs?/10/r
    
    • 大小写转换
      /U转义符把后面的所有字符都转换为大写。
      /L转义符把后面的所有字符都转换为小写。

    /l和/u只会影响后面的一个字符

    s/(fred | barney)/\u$1/ig;
    

    split操作符

    根据给定的模式拆分字符串,用拆分模式扫描指定的字符串并返回字段。如果有两个分隔符连在一起,就会产生空字段。

    my @fields = split /separator/,"abc:def::"
    #得到("abc","def","")
    
    • join函数
      join函数和split相反,会把片段结合成一个字符串。
    my $x = join ":",4,5,6,7;
    #结果是"4:5:6:7"
    

    更强大的正则表达式

    • 非贪婪量词(在贪婪量词后面加?)
      +? 在表示一次或多次的同时,也表示匹配的字符串越短越好
    /fred.+barney/
    #正则表达式引擎的回溯动作会很繁琐
    /fred.+?barney/
    
    • 跨行的模式匹配
      模式加上/m修饰符后,就可以用来匹配字符串内的每一行。
    open FILE,$filename
        or die "can't open!";
    my $lines = join ' ',<FILE>;
    $lines =~ s/^/$filename: /gm;
    

    从命令行直接编辑

    perl -p -i.bak -w -e 's/Randall/Randal/g' fred*.dat
    

    -p让perl自动生成一小段程序。
    -i.bak是备份
    -w开启警告
    -e表面后面的是执行的程序代码

    相关文章

      网友评论

          本文标题:用正则表达式处理文本

          本文链接:https://www.haomeiwen.com/subject/uvnwvqtx.html