青岛福奈特干洗店:Perl 中的正则表达式1

来源:百度文库 编辑:中财网 时间:2024/04/28 07:20:17

1 正则表达式的三种形式

首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:

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

替换:s///

转化:tr///

这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn‘t),并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:

$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 () { print if (m/error/); } # 这一句稍微复杂一些,他将打印 FILE 文件中所有包含 error 字符串的行。

Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:

$string = "I love perl";

$string =~ s/(love)/<$1>/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I perl"

$string = "i love perl";

$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 " love "

替换操作 s/// 还可以在末尾加上 e 或 g 参数,他们的含义分别为:

s///g 表示把待处理字符串中所有符合 的模式全部替换为 字符串,而不是只替换第一个出现的模式。

s///e 表示将把 部分当作一个运算符,这个参数用的不多。

比如下面的例子:

$string = "i:love:perl";

$string =~ s/:/*/; #此时 $string="i*love:perl";

$string = "i:love:perl";

$string =~ s/:/*/g; #此时 $string="i*love*perl";

$string =~ tr/*/ /; #此时 $string="i love perl";

$string = "www22cgi44";

$string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 "www44cgi88"。

下面给出一个完整的例子:

#!/usr/bin/perl

print"请输入一个字符串!\n";

$string = ; # 代表标准输入,会让使用者输入一字符串

chop($string); # 将$string最后一个换行的字符\n删除掉

if($string =~ /perl/){

print("输入的字符串中有 perl 这个字符串!\n";

}

如果输入的字符串含有 perl 这个字符串的话,就会显示后面的提示信息。