这几天使用了perl进行文本处理,感觉很方便。
下面是几点经验,以后可能用到,记载在这防止遗忘。
1.perl中匹配汉字(处理中文)
使用 [/x80-0xff]来匹配汉字。我用它来匹配的是GB18030 编码的汉字,不知道其他的编码像unicode,utf-8,utf-16等可不可以。
2.正则表达式的匹配
".*?"为最小匹配
".*"为最大匹配
使用'/'来进行转义
3.正则表达式
正则表达式有三种存在形式,他们分别是:
匹配:m/<regexp>/ (还可以简写为 /<regexp>/ ,略去 m)
替换:s/<pattern>/<replacement>/
转化:tr/<pattern>/<replacemnt>/
几个例子(转)
$str = "I love Perl";
$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串,则返回 "1" 否则返回 "0"。
$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH",如果发生此替换则返回 "1",否则返回 "0"。
$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。
另外还有:
foreach (@array) { s/a/b/; } # 此处每次循环将从 @array 数组中取出一个元素存放在 $_ 变量中,并对 $_ 进行替换处理。
while (<FILE>) { print if (m/error/); } # 这一句稍微复杂一些,他将打印 FILE 文件中所有包含 error 字符串的行。
Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:
$string = "I love perl";
$string =~ s/(love)/<$1>/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I <love> perl"
$string = "i love perl";
$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 "<perl> love <i>"
perl URLencode URLdecode的方法
#引入模块
use URI::Escape;
#urlencode
$encoded = uri_escape("10% is enough/n");
#urldecode
$decoded = uri_unescape($encoded);
结束了,perl用起来就是如此简单。