Perl 的正则表达式中如果出现 ()

来源:互联网 发布:越南崛起 知乎 编辑:程序博客网 时间:2024/04/29 17:39

这几天使用了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>"


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caohao2008/archive/2007/11/13/1881721.aspx