您现在的位置:中国下载站学院中心网络编程Perl应用教程PERL基础教程 → 文章列表

Perl 中的正则表达式

作者:佚名  来源:不详  发布时间:2006-12-29 13:49:00   

减小字体 增大字体

 
 
 

1 正则表达式的三种形式

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

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

替换:s/<pattern>/<replacement>/

转化:tr/<pattern>/<replacemnt>/

这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 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 (<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>"

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

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

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

比如下面的例子:

$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 = <STDIN>; # <STIDN>代表标准输入,会让使用者输入一字符串

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

if($string =~ /perl/){

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

}

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


itbulo.com/post.php?action=newthread&fid=51&extra=page%3D1" title="如有错误,麻烦请及时告诉我们,谢谢。" target="_blank">我要纠错】【itbulo.com/" target="_blank">进入论坛交流】【关闭此页】【iTbulo.net/" class="lblue" target="_blank">进入博客】

2 正则表达式中的常用模式

下面是正则表达式中的一些常用模式。

/pattern/ 结果
.匹配除换行符以外的所有字符
x?匹配 0 次或一次 x 字符串
x*匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.*匹配 0 次或一次的任何字符
.+匹配 1 次或多次的任何字符
{m}匹配刚好是 m 个 的指定字符串
{m,n}匹配在 m个 以上 n个 以下 的指定字符串
{m,}匹配 m个 以上 的指定字符串
[]匹配符合 [] 内的字符
[^]匹配不符合 [] 内的字符
[0-9]匹配所有数字字符
[a-z]匹配所有小写字母字符
[^0-9]匹配所有非数字字符
[^a-z]匹配所有非小写字母字符
^匹配字符开头的字符
$匹配字符结尾的字符
\d匹配一个数字的字符,和 [0-9] 语法一样
\d+匹配多个数字字符串,和 [0-9]+ 语法一样
\D非数字,其他同 \d
\D+非数字,其他同 \d+
\w英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
\w+和 [a-zA-Z0-9]+ 语法一样
\W非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
\W+和 [^a-zA-Z0-9]+ 语法一样
\s空格,和 [\n\t\r\f] 语法一样
\s+和 [\n\t\r\f]+ 一样
\S非空格,和 [^\n\t\r\f] 语法一样
\S+和 [^\n\t\r\f]+ 语法一样
\b匹配以英文字母,数字为边界的字符串
\B匹配不以英文字母,数值为边界的字符串
a|b|c

在百度中搜索更多Perl 中的正则表达式相关网页 转贴于:中国下载站

  • 上一篇文章:Perl新手误区和新手必读
  • 下一篇文章:Perl的简单语法(与C语言语法的异同)
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!