1.7.4 后来引用 BACKWARDFORWARD


我们前面提到你能用括号为数量词组合字符, 但你也能用括号记住你所匹配的各个部分。包含规则表达式的一对括号使得所匹配的部分被记住,以便后来使用。这样并不改变所匹配的部分,所以/+/和/(+)/将尽可能多的匹配许多数字, 但后一种情况下, 这些所匹配的部分将以特别变量的形式被记住, 用于以后的引用。

你怎样指向已记住的字符串部分决定于你想从哪儿做这件事。在同样的规则表达式中,你使用一个反斜线(backslash)后跟一个整数。相应于一个给定括号的这个整数是通过对匹配句型从左向右计数左边的括号,从一开始。所以例如,为匹配类似于一个HTML标识(象"Bold"), 你可以使用/<(.*?>.*?<>/。这就迫使句型的两个部分匹配同样的字符串,例如上面的"B"。

在规则表达式本身的外面, 例如, 在替代语句的替代部分, 这个特别的变量好象是一般的以整数命名的一个标量变量被使用。所以,例如,如果你想交换一个串的前两个词,你可以使用:

s/(+)+(+)/$2 $1/

替代的右边只是一类有趣的双引号字符, 那就是为什么你能在这儿插入(包括后来引用变量)变量。这是一个强有力的概念:插入(在控制环境下)是"Perl是一个好的文本处理语言"的原因之一。当然,另一个原因是句型匹配。规则表达式擅于分离字符,而插入有益于再组合字符。所以,有办法恢复分离的字符。


Copyright: NPACT BACKWARDFORWARD