非淡泊无以明志,非宁静无以致远
全部博文(408)
分类:
2009-11-25 22:30:19
1. 基本元字符:
Perl 里的模式识别所有的 12 个传统的元字符(所谓十二烂人),以及它们的所有潜能和表现力。许多其他正则表达式包里也能看到它们:
\ | ( ) [ { ^ $ * + ? .
它们中有些曲解规则,令跟在它们后面本来正常的字符变成特殊的。我们不喜欢把长序列叫做“字符”,因此,如果它们组成长序列后,我们叫它们元符号(有时候干脆就叫“符号”)。但是在顶级,这十二个元字符就是你(和 Perl)需要考虑的所有内容。任何东西都是从这里开始的。
有些简单的元字符就代表它们自己,象 . 和 ^ 和 $。它们并不直接影响它们周围的任何东西。有些元字符运行起来象前缀操作符,控制任何跟在后面的东西,象反斜杠 “\” 。其他的则像后缀操作符,控制紧排在它们前面的东西,像 *,+,和 ?。有一个元字符:|,其作用象中缀操作符,站在它控制的操作数中间。甚至还有括弧操作符,作用类似包围操作符,控制一些被它包围的东西,像 (...) 和 [...]。圆括弧尤其重要,因为它们在内部声明 | 的范围,而在外部声明 *,+ 和 ? 的范围。
如果你只学习十二个元字符中的一个,那么选反斜杠。(恩。。。还有圆括弧)这是因为反斜杠令其他元字符失效。如果在一个 Perl 模式里,一个反斜杠放在一个非字母数字字符前,这样就让下一个字符成为一个字面的文本。如果你象在一个模式文本里匹配十二个元字符中的任何一个,你可以在它们前面写一个反斜杠。因此,\. 匹配一个真正的点,\$ 匹配真正的美元符,\\ 是一个真正的反斜杠等等。这样做被称做“逃逸”元字符,或曰“引号包围之”,或者有时候就叫做“反斜杠某”。(当然,你已经知道反斜杠可以用于禁止在双引号字串里进行变量代换。)
虽然一个反斜杠把一个元字符转换成一个文本字符,它对后继的字母数字字符的作用却是完全另一码事。它把本来普通的东西变特别。也就是说,它们在一起形成元字符。我们在里给出了一个按字母排序的元字符表。
2.元字符表
在下面的表格中,如果给定的符号是可以计量的(可以用多或少来描述匹配的字符),则对应的“原子性”一列则“是”。同样,我们使用“...”来表现“其它的”,如果你觉得下面表格中的解释不够清晰,可以参考后面关于详细讨论“...”含义的部分。
列出了基本的元字符。前面四个是我们前面提及的结构化元字符,后三个是单一元字符。
表 5.4. 元字符表
符号 |
原子性 |
含义 |
\... |
变化 |
反逃逸下一个非字母数字字符,转意下一个字母数字(可能) |
...|... |
否 |
可选(匹配前者或者后者)。 |
(...) |
是 |
分组(当作单元对待)。 |
[...] |
是 |
字符表(匹配一个集合中的一个字符)。 |
^ |
否 |
如果在字串开头则为真(或者可能是在任何换行符后面。) |
. |
是 |
匹配一个字符(通常除了换行符以外)。 |
$ |
否 |
在字串尾部时为真(或者可能是在任何换行符前面)。 |