perl学习小结(3):s///匹配替换及正则表达式高级应用

来源:互联网 发布:怎么查淘宝注册日期 编辑:程序博客网 时间:2024/06/06 06:30

 

修饰符/g(global全局) 要求s///将不相重叠的所有匹配上的部分都进行替换,如s//s+/ /g;将所有的是将多个空格用单个空格替换掉

 

大小写转换:确保被替换的字符串均是大写的,可以使用/U修饰符,其要求紧接着的均是大写,如s/(fred|barney)//U$1/gi;

要求后面的均为小写:/L。可以使用/E改变/U、/L对剩余的(替换的)字符串的默影响。

小写形式的修饰符/l 和/u,只作用于下一个字符

同时使用/u 和/L 表示“第一个字母大写,其它字母均小写

 

split与join的使用:

@fields = split /separtor/, $string;默认时,split 对$_操作,模式为空白

my $result = join $glue, @pieces;

 

列表context下m//的使用:

在列表context 中使用模式匹配(m//)时,如果匹配成功返回值为内存变量值(模式中()内部分的值)的列表;如果匹配失败则为空列表。

my $data = “Barney Rubble Fred FlintstoneWilma Flintstone”;

my %last_name = ($data =~ / (/w+)/S+(/w+)/g);

 

非贪婪的数量词:贪婪的数量词(*+?{m,n})?

 

匹配多行文本:/m选项可以在字符串中使得^$根据内部换行符进行锚定

 

my $filename = shift @ARGV;

open FILE,$filename#打开文件时不区分文件名大小写

or die "Can’t open '$filename': $!";#$!

my $lines = join '',<FILE>;#此时^$锚定整个字符串

$lines =~ s/^/$filename:/gm;#而选项/m允许针对内部换行符进行匹配而不是整个字符串

print $lines;

 

 

更新大量文档:

#!C:/strawberry/perl/bin/perl.exe -w

use strict;

$^I="";#$^I中的字符串会成为备份文件的扩展名,空串表示不会将原来的文件进行备份

while(<>){

s///;

...

print;#写入

}

 

非捕捉用的括号:开括号后面加上一个问号和冒号,(?:),此时括号只进行分组,又称为非捕捉用的括号(non-capturing parentheses)

 

Perl 的正则表达式的括号还有些其它的特殊用法,它们可以完成某些复杂的功能,如向前找,向后找,内嵌注释,甚至在

模式中执行代码。你可以参阅perlre 的帮助手册了解更详细的信息。

 

原创粉丝点击