Perl 中的正则表达式自动测试脚本语言
“feishell”通过精心收集,向本站投稿了5篇Perl 中的正则表达式自动测试脚本语言,以下是小编给大家整理后的Perl 中的正则表达式自动测试脚本语言,欢迎大家前来参阅。
篇1:Perl 中的正则表达式自动测试脚本语言
1 正则表达式的三种形式 首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/regexp/ (还可以简写为 /regexp/ ,略去 m) 替换:s/pattern/replacement/ 转化:tr/pattern/replacemnt/ 这三种形式一般都和 =~ 或 !~ 搭配使用(
1 正则表达式的三种形式
首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:
匹配: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 (
Perl 的正则表达式中如果出现 ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:
$string = “I love perl”;
$string =~ s/(love)/<$1>/; # 此时 $1 = “love”,并且该替换的结果是将 $string 变为 “I
$string = “i love perl”;
$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = “i”,$2 = “ love ”,$3 = “perl”,并且替换后 $string 变为 “
love ”
替换操作 s/
/
s/
/ 的模式全部替换为
s/
/
比如下面的例子:
$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 这个字符串的话,就会显示后面的提示信息。
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匹配符合a字符 或是b字符 或是c字符 的字符串abc匹配含有 abc 的字符串(pattern)() 这个符号会记住所找寻到的字符串,是一个很实用的语法,第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量,以此类推下去。/pattern/ii 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。\如果要在 pattern 模式中找寻一个特殊字符,如 “*”,则要在这个字符前加上 \ 符号,这样才会让特殊字符失效下面给出一些例子:
范例说明/perl/找到含有 perl 的字符串/^perl/找到开头是 perl 的字符串/perl$/找到结尾是 perl 的字符串/c|g|i/找到含有 c 或 g 或 i 的字符串/cg{2,4}i/找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串/cg{2,}i/找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串/cg{2}i/找到 c 后面跟着 2个 g,再跟着 i 的字符串/cg*i/找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i//cg+i/找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i//cg?i/找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i//c.i/找到 c 后面跟着一个任意字符,再跟着 i 的字符串/c..i/找到 c 后面跟着二个任意字符,再跟着 i 的字符串/[cgi]/找到符合有这三个字符任意一个的字符串/[^cgi]/找到没有这三个字符中任意一个的字符串/\d/找寻符合数字的字符,可以使用/\d+/来表示一个或是多个数字组成的字符串/\D/找寻符合不是数字的字符,可以使用/\D+/来表示一个或是更多个非数字组成的字符串/\*/找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 \ 符号,这样才会让这个特殊字符失效/abc/i找寻符合 abc 的字符串而且不考虑这些字符串的大小写3 正则表达式的八大原则
如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。
正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。
正则表达式在对付数据的战斗中可形成庞大的联盟――这常常是一场战争。我们要记住下面八条原则:
・ 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。
・ 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。
・ 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = 'string string2'; $a =~ s/string/ /; 导致 $a = 'string 2')。
・ 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = “ s” )。
・ 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。
・ 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/\w+/ 匹配一个或多个单词字符;$a =~ m/\d/“ 匹配零个或多个数字。
・ 原则7:如果欲匹配不止一个字符集合,Perl使用 ”|“ 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。
・ 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)
想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。
原文转自:www.ltesting.net
篇2:perl连接access数据库自动测试脚本语言
前题是必须安装好activeperl (505以上),以及MS Access 97 一. 安装Win32-ODBC模块 步骤1: 从TOOLS栏目中下载Win32-ODBC.zip,下载完后用winzip解开到一个temp目录,共有三个文件: Readme Win32-ODBC.ppd Win32-ODBC.tar.gz 步骤2: 在DOS窗口下,temp目录
前题是必须安装好activeperl (505以上),以及MS Aclearcase/” target=“_blank” >ccess 97
一. 安装Win32-ODBC模块
步骤1:
从TOOLS栏目中下载Win32-ODBC.zip,下载完后用winzip解开到一个temp目录,共有三个文件:
Readme
Win32-ODBC.ppd
Win32-ODBC.tar.gz
步骤2:
在DOS窗口下,temp目录中运行下面的DOS命令:
ppm install Win32-ODBC.ppd
二. 准备测试用数据库(ACCESS)
步骤1:
启动MS ACCESS,建立一个新空数据库,命名为odbctest.mdb,保存在某一目录中(记住路径),
步骤2:
然后新建一个表,建立三个字段:
字段名称 数据类型
Name 字符,长度50
Email 字符,长度50
Age 数字,长整型
将这个表保存为address(注意这个例子中,没有用自动增加的ID).输入若干记录:
Nighthawk nighthawk@163.net 20 1234567
John jt@163.net 24 0284393293
kit kit@21cn.com 18 3948932
保存后,关闭数据库文件。
步骤3:
打开控制面板中的 ODBC数据源(32位),在用户DSN栏中,找到用户数据源列表,选中名称为“MS Access 97 Database”的一行,然后按“配置”键。
在Database框中按“Select..”,选择步骤1.2中建立的数据库文件odbctest.mdb,按OK即可。ODBC设置中的其它项目全部采用缺省设置,然后就是OK,确定,关闭对话窗口。
三. 这时候,数据库已经可以用了,我们来测试一下:
#!/usr/bin/perl
use Win32::ODBC;
$DSN = “MS Access 97 Database”;
$DBase = “access.mdb”;
#连接数据库
if (!($db = new Win32::ODBC($DSN))){
print “连接数据库失败.n”;
exit();
}
else{
print “连接数据库成功 (连接号:”, $db->Connection(), “)nn”;
}
#数据库中的表
print “数据库中的表:”;
@tables = $db->TableList;
print @tables;
print “n”;
#选择数据表
if (! $db->Sql(“SELECT * FROM [address] WHERE age>=20”) ){
@FieldNames = $db->FieldNames();
$Cols = $#FieldNames + 1;
#表中字段数
print “表address字段数:$Colsn”;
#字段列表
for ($i = 0; $i < $Cols; $i++){
print “$FieldNames[$i]t”;
}
print “n”;
#列出年龄大于20的记录
while($db->FetchRow()) {
@values = $db->Data();
print @values;
print “n”;
}
}
##### sql #########
#添加记录
$sqlinsert = “INSERT INTO address VALUES ('Euler', 'euler@21cn.com', 28, '021-345689')”;
#更新记录
$sqlupdate = “UPDATE address SET age = age+10 ”;
#删除记录
$sqldelete = “DELETE FROM address WHERE name='jimtyan'”;
$rc = $db->Sql($sqlinsert);
die qq(SQL 失败 “$sqlinsert”: ), $db->Error(), qq(n) if $rc;
$rc = $db->Sql($sqlupdate);
die qq(SQL 失败 “$sqlupdate”: ), $db->Error(), qq(n) if $rc;
$rc = $db->Sql($sqldelete);
die qq(SQL 失败 “$sqldelete”: ), $db->Error(), qq(n) if $rc;
#关闭链接
$db->Close();
进一步学习请访问Win32-ODBC模块作者主页:www.roth.net/perl/odbc/ Nighthawk 版权所有, 署名
原文转自:www.ltesting.net
篇3:perl 域名查询程序自动测试脚本语言
# perl 国内域名查询程序
# flybird@chinaasp.com
# -9-22
# perl 写socket程序确实很简单,
use IO::Socket::INET;
$fqdn=“ourstory.com.cn”;
$server = 'whois.cnnic.net.cn';
$sock = IO::Socket::INET->new(“$server:43”) || die “fail”;
print $sock “$fqdn\n”;
@ret=<$sock>;
print “@ret”;
原文转自:www.ltesting.net
篇4:Perl语言中的“指针”自动测试脚本语言
在C语言中,指针的使用给我们带来了很大的方便,但是在Perl中没有直接提供这样的数据类型,在某些情况下就存在一些很不方便的地方, 例如:在调用函数时,如果参数值和返回值比较多,而且非常复杂的时候,仅仅是参数栈或返回值栈是不够用的。这时候,有两种
在C语言中,指针的使用给我们带来了很大的方便,但是在Perl中没有直接提供这样的数据类型,在某些情况下就存在一些很不方便的地方。
例如:在调用函数时,如果参数值和返回值比较多,而且非常复杂的时候,仅仅是参数栈或返回值栈是不够用的。这时候,有两种解决方法,一种是使用引用调用,这样可以传递象数组、哈希数组一类的数据,另外一种就是我要着重介绍的“指针”,主要用来传递复杂的结构,例如多维数组。下面,我用多维数组为例:
多维数组指针的创建非常简单,具体语句如下:
my $multi_array=[];
这时,$multi-array就是一个指针,它的内容是undefined. 下一步我们要给它赋值,语句如下:
@{$multi_array}=((a,...,z),(1,...,10),($a,...,$xx));
这时,$multi-array就成了一个指向二维数组的指针,当然,如果必要的话,你可以定义更多的维数,
如何使用这个二维数组的元素呢?
$multi_array->[0][1] #数组第一维,第二个元素
如何使用一行元素呢?
@{$multi_array->[0]} #二维数组的第一行元素
这样,你就可以方便的借助指针使用多维数组了。标量$multi_array就象一个普通的标量,在函数调用和返回时,就可以直接使用了。
原文转自:www.ltesting.net
篇5:Perl中的块输出用法详解自动测试脚本语言
Perl中的块输出语句在CGI程序中有着极其重要的作用,它可以用来输出一大段HTML代码,或者是在其他的程序中输出固定的块内容, 块输出语句的用法一般为: print _FLAG_; content ... .... end of content _FLAG_ 我们来一行一行的解释它的用法: 1.第一行 块输
Perl中的块输出语句在CGI程序中有着极其重要的作用,它可以用来输出一大段HTML代码,或者是在其他的程序中输出固定的块内容。
块输出语句的用法一般为:
print <<_FLAG_;
content ...
....
end of content
_FLAG_
我们来一行一行的解释它的用法:
1.第一行
块输出开始的标志为“print <<_FLAG_;”,其中,print是大家都很熟悉的输出语句,“<<”是表明使用块输出,“_FLAG_”是定义的块输出标志为“_FLAG_”,这个标志可以任意定义,但是最好定义一个表怪的字符串,以免和内容中的行发生混淆,
这一行最后一个字符是分号,是语句结束的标志,这里就不作解释了。
2.第二行至倒数第二行
这里是块输出的具体内容,你要输出的内容就写在这里。
3.最后一行
这行只有很短的一段内容,就是“_FLAG_”。这一行里我们使用前面定义的块标志放在这一行的开始,这样标志着块输出的结束。这里有几个需要注意的问题:
(1)标志必须放在行开头。
(2)标志后面不能有任何字符,包括语句结束符号――分号。
上面介绍了块输出语句的基本用法,另外还有几个特殊的地方需要注意:
a.输出块内容中可以使用变量替换部分内容,用法和print语句一样,直接在你需要插入变量的地方写上变量的名称。
b.输出块内容中不能包含两个特殊字符――$和@,这两个字符如果包含在输出块内容中时,必须转义,也就是说,要在字符的前面加上“”。
c.在同一个文件或函数中,定义的块输出标志不能相同,否则,就会出现难以预料的后果。
以上是我在Perl编程中的一点体会,希望能给大家带来帮助。
原文转自:www.ltesting.net
【Perl 中的正则表达式自动测试脚本语言】相关文章:
6.C.net/Perl/PHP 三个版本的 ServU提权源码程序
7.中读后感
8.中总结
9.中 成语
10.中教案






文档为doc格式