摘自《Perl语言编程(第三版)》---大骆驼书

    今天在写一个正则表达式进行模式匹配遇到的问题,我意本为“从文本中每次读取一行数据,如果读到"空行"or"[file]"”,则丢掉数据,继续读取下一行,代码如下:

if ( ! open($hSustainChannelFile, "$FileName") )

 {
        Log::WriteLog("Fail to open file /"$FileName/"./n");
        return 0;
  }else 
{
        while(<$hSustainChannelFile>)

       {
            chomp($_);
            if ( !defined($_) ||(/^(/[file/])/i))

          {
                @KeyArray = ();
                next;               
            }

        }

     }

     Perl 里的模式识别所有的 12 个传统的元字符(所谓十二烂人),以及它们的所有潜能和
表现力。许多其他正则表达式包里也能看到它们:


/ | () [ { ^ $ * + ? .


    它们中有些曲解规则,令跟在它们后面本来正常的字符变成特殊的。我们不喜欢把长序列叫
做“字符”,因此,如果它们组成长序列后,我们叫它们元符号(有时候干脆就叫“符号”)。
但是在顶级,这十二个元字符就是你(和 Perl)需要考虑的所有内容。任何东西都是从这
里开始的。

    有些简单的元字符就代表它们自己,象 . 和 ^ 和 $。它们并不直接影响它们周围的任何
东西。有些元字符运行起来象前缀操作符,控制任何跟在后面的东西,象反斜杠 “/” 。其
他的则像后缀操作符,控制紧排在它们前面的东西,像 *,+,和 ?。有一个元字符:|,
其作用象中缀操作符,站在它控制的操作数中间。甚至还有括弧操作符,作用类似包围操作
符,控制一些被它包围的东西,像 (...) 和 [...]。圆括弧尤其重要,因为它们在内部声明 |
的范围,而在外部声明 *,+ 和 ? 的范围。
    如果你只学习十二个元字符中的一个,那么选反斜杠。(恩。。。还有圆括弧)这是因为反
斜杠令其他元字符失效。如果在一个 Perl 模式里,一个反斜杠放在一个非字母数字字符前,
这样就让下一个字符成为一个字面的文本。如果你象在一个模式文本里匹配十二个元字符中
的任何一个,你可以在它们前面写一个反斜杠。因此,/. 匹配一个真正的点,/$ 匹配真正
的美圆符,// 是一个真正的反斜杠等等。这样做被称做“逃逸”元字符,或曰“引号包围之”,
或者有时候就叫做“反斜杠某”。(当然,你已经知道反斜杠可以用于禁止在双引号字串里进
行变量代换。)
    虽然一个反斜杠把一个元字符转换成一个文本字符,它对后继的字母数字字符的作用却是完
全另一码事。它把本来普通的东西变特别。也就是说,它们在一起形成元字符。我们在表 5-7
里给出了一个按字母排序的元字符表。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐