2007年5月27日星期日

《Learning Perl》学习笔记 -- 第七章 正则表达式的概念

笔者注:用过几次正则表达式后,为它的强大与灵活所折服,打算再深入研究一下,本书推荐了Jeffrey E.F.Friedl编著的《Mastering Regular Expression》,已经从图书馆借的,有空研读一下:P

本章主要介绍了正则表达式的概念,还介绍了正则表达式的一些基本要素,如元字符、数量符、模式分组、选择等。

1.正则表达式的概念

书中这段讲的很好,简明易懂,我就照抄了,呵呵

正则表达式(regular expression),在Perl中经常被成为模式(pattern),是与一个给定字符串匹配或不匹配的模板。也就是说,有无限数量可能的文本字符串。一个给定的模式把这个无限集合分成两个组:匹配的组和不匹配的组。不能有“可能”、“也许”、“似乎”之类的匹配:必须是要么匹配,要么不匹配。

正则表达式强调的是一种精确的概念。

2.使用简单的模式

要比较一个模式(正则表达式)和$_的内容,只需把模式放在一对斜杠(/)之间,如下所示:

$_ = "yabba dabba doo";

if (/abba/) {

...

}

表达式/abba/在$_中寻找这个四字符的字符串,如果找到了,返回真;否则,返回假。

这是一种默认模式,在下一章中将介绍如何在一个指定的变量中匹配特定的模式。

所有可以放在双引号字符串中的常见反斜杠转义符都可以被用在模式中。

3.元字符

正则表达式中有一组具有特殊意义的特殊字符,叫做元字符(metacharater)。

句号(.):匹配除了换行符(n)以外的任何单个字符;

反斜杠(\):在任何元字符前加一个反斜杠都会使得它不再特别;\.表示一个句号,\\表示一个反斜杠;

4.数量符(quantifier)

星号(*):匹配前面的条目零次或多次;

加号(+):匹配前面的条目一次或多次;

问号(?):匹配前面的条目零次或一次,即前面的条目是可选的;

这三个数量符都必须跟在某些东西的后面,因为它们就是表示前面的条目可能重复多少次。

5.模式中的分组

在正则表达式中,使用小括号("()")进行分组。譬如,模式/(fred)+/匹配类似于fredfredfred的字符串。

6.选择

竖线表示要么是左侧匹配,要么是右侧匹配,此时读做“或”,也就是说,如果模式中竖线左侧的部分不能匹配,那么右侧的部分就有机会进行匹配。

7.一个模式测试程序

该章给了一个有趣的模式测试程序,可以用来测试自己写的正则表达式是否可以如自己所愿、匹配需要匹配的东西。

#!/usr/bin/perl

while (<>) { #一次得到一个输入行

chomp;

if (/YOUR_PATTERN_GOES_HERE/) {

print "Matched: $`<$&>$'\n"; # <>之间、$后面的是与字符(&)

} else {

print "No match.\n";

}

}

没有评论: