Perl语言简介及正则表达式应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
正则表达式 范例
/perl/ /^perl/ /perl$/ /c|g|i/ /cg{2,4}i/ /cg{2,}i/ /cg{2}i/ /cg*i/ /cg+i/ /cg?i/ /c.i/ /c..i/ /[cgi]/ /[^cgi]/ /\d/ /\D/
/\*/ /abc/i
找到含有 perl 的字符串 找到开头是 perl 的字符串 找到结尾是 perl 的字符串 找到含有 c 或 g 或 i 的字符串 找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串 找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串 找到 c 后面跟着 2个 g,再跟着 i 的字符串 找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,}i/ 找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i/ 找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i/ 找到 c 后面跟着一个任意字符,再跟着 i 的字符串 找到 c 后面跟着二个任意字符,再跟着 i 的字符串 找到符合有这三个字符任意一个的字符串 找到没有这三个字符中任意一个的字符串 找寻符合数字的字符,可以使用/\d+/来表示一个或是多个数字组成的字符串 找寻符合不是数字的字符,可以使用/\D+/来表示一个或是更多个非数字组成的 字符串 找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特 殊符号前加上 \ 符号,这样才会让这个特殊字符失效 找寻符合 abc 的字符串而且不考虑这些字符串的大小写
• PPM:Perl Package Manager
• • • Perl官网:http://www.perl.org/ 最新版本5.18.1 免费 代码库网址:http://search.cpan.org/ 百度搜索“Perl”——第一条信息即可了解详情
3
当前的需求 • 想要获取一个大容量的CP datalog文件中的 所有芯片的Icc3具体数值?还有对应坐标? • 想要知道成品测试环节,每颗芯片的测试 总时间?擦除时间统计?各类参数实际值 ?及时发现其中“特别”的芯片?
13
替换操作(范例)
$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"。

Note:Perl的条件控制叙述和C语言很像,在此不再详细展开。
12
替换操作 • s/<pattern>;/<replacement>;/ 还可以在末 尾加上 e 或 g 参数,他们的含义分别为:
– s/<pattern>;/<replacement>;/g 表示把待处理 字符串中所有符合 <pattern>; 的模式全部替换 为 <replacement>; 字符串,而不是只替换第一 个出现的模式。 – s/<pattern>;/<replacement>;/e 表示将 把 <replacemnet>; 部分当作一个运算符,这个 参数用的不多。
14
RE使用的八项原则
• • • • 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将 把@array作为标量对待,因此可能不会成功)。 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则 表达式一次( $a = 'string string2'; $a =~ s/string/ /; 导致 $a = ‗ string2')。 原则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用 (?..) 语法给正则表达式提供扩展功能。见后续补充内容。
• Perl被设计为:90%处理文本,10%针对其它情况 • 我们可以结合UltraEdit提高搜索效率——UltraEdit中的搜 索功能包括了正则表达式的匹配功能
4
正则表达式 Regular Expression (RE) • 三种存在形式
– 匹配:m/<regexp>;/ (还可以简写 为 /<regexp>;/ ,略去 m) – 替换:s/<pattern>;/<replacement>;/ – 转化:tr/<pattern>;/<replacement>;/
• 一般都和 =~ 或 !~ 搭配使用
– "=~" 表示相匹配,在整条语句中读作 does – "!~" 表示不匹配,在整条语句中读作 doesn't – 并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认 为处理 $_ 变量中的内容。$ _是Perl的通用变量,Perl的许多运算符都使 用$_作为默认参数,其中有些运算符也会修改$_,故使用时需注意。
– 如果指令(statement)只有一项,我们可以使用倒装句法,看起来比 较简洁。statement if (Expression);
• foreach (@array) { s/a/b/;} – # 此处每次循环将从 @array 数组中取出一个元素存放 在 $_ 变量中,并对 $_ 进行替换处理。 • while (<FILE>;) { print if (m/error/); } – # 将打印 FILE 文件中所有包含 error 字符串的行。 – 也有后置循环do {Code Segment} while(Expression);
9
匹配的注意事项
• 通常情况下,模式匹配从目标字符串的左边开始,然后逐步向右边进 行匹配。 • 只有当整个模式能够用于与目标字符串相匹配时,模式匹配才返回真 (在任何上下文中均如此)。 • 目标字符串中第一个能够匹配的字符串首先进行匹配。正则表达式不 会漏掉某一个能够匹配的字符串,而去寻找另一个更远的字符串来进 行匹配。 • 进行第一次最大字符数量的匹配。你的正则表达式可能迅速找到一个 匹配的模式,然后设法尽可能延伸能够匹配的字符范围。正则表达式 是“贪婪的”,也就是说,它会尽可能多地寻找能够匹配的字符。 • Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式 被 Perl 解释器自动依次赋给系统 $1, $2 ... (或\1,\2…)
^ $ \d \d+ \D \D+ \w
\w+ \W
\W+ \s \s+ \S \S+ \b \B a|b|c abc
匹配字符开头的字符 匹配字符结尾的字符 匹配一个数字的字符,同[0-9] 语法 匹配多个数字字符串,同[0-9]+ 语法 非数字,其他同 \d 非数字,其他同 \d+ 英文字母或数字的字符串,同 [a-zAZ0-9_] 语法 同[a-zA-Z0-9_]+ 语法 非英文字母或数字的字符串,和 [^azA-Z0-9_] 语法一样 同 [^a-zA-Z0-9_]+ 语法 空格,同 [\n\t\r\f] 语法 同 [\n\t\r\f]+ 非空格,同 [^\n\t\r\f] 语法 同 [^\n\t\r\f]+ 语法 匹配以英文字母,数字为边界的字符串 匹配不以英文字母,数值为边界的字符串 匹配符合a或b或c的字符串 匹配含有 abc 的字符串
• • • •
• open(FH, ">>filename")
• FH(FileHandle)是文件句柄,建议都大写。 • <FH>尖括号运算符能够读取来自文件的一行输入。 • print FH ―Hello!\n‖; ——即打印输出到句柄引用的文件。
11
其他语句补充说明
• if (Expression) {Code Segment}
• 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加 上 \ 符号,这样才会让特殊字符失效
7
RE常用模式汇总
. x? x*
x+ .* .+ {m} {m,n} 字符串 {m,} [] [^] [0-9] [a-z] [^0-9] [^a-z]
匹配除换行符以外的所有字符 匹配 0 次或一次 x 字符串 匹配 0次以上(含0次)x字符串,但 匹配可能的最少次数 匹配 1 次或多次 x 字符串,但匹 配可能的最少次数 匹配 0次以上(含0次)的任何字符 匹配 1 次或多次的任何字符 匹配刚好是 m 个 的指定字符串 匹配在 m个 以上 n个 以下 的指定 匹配 m个 以上 的指定字符串 匹配符合 [] 内的字符 匹配不符合 [] 内的字符 匹配所有数字字符 匹配所有小写字母字符 匹配所有非数字字符 匹配所有非小写字母字符
5
正则表达式 范例
• $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"。
• RE中的变量包括:标量变量($),数组变量(@),哈希结构/关联数组(%), 句柄,引用/指针(\)
6
匹配(RE如何表达匹配模式) • 匹配模式
– 元字符
• 通配符符 . * + ? \ ( ) [ { @ • 分组和选择 | • 位置通配符:^ $
– 非输出字符 \n \r \t \f – 字符类 \w \W \s \S \d \D \b \B
Perl语言简介
主讲人: 陈耀
二零一三年十二月
主要内容 • 历史简介 • 正则表达式 • 实例讲解
2
Perl的历史Biblioteka Baidu
• 创造者:Larry Wall (1987年发表) • 一般被称为“实用报表提取语言” (Practical Extraction and Report Language) • 特点:集成了正则表达式的功能,以及巨大的第三 方代码库CPAN
10
其他语句补充说明(文档操作)
Expression open(FH, "filename") open(FH, "+filename") open(FH, ">filename") open(FH, "+>filename") Effect Opens filename for reading. Same as above Opens filename for writing. Opens filename for both reading and writing. Appends to filename.
相关文档
最新文档