Perl的规则表达式(正规式)通常是非常神秘而且难以应付的,但是下面的两个技巧应该会有用。我们将首先学习一种技术来使得表达式更易读。然后,我们将解释一种N次重复一个表达式的方法。
与Perl的正规式打交道是非常繁琐的,特别是因为正规式的内容难以阅读。当你在阅读一个不是由你自己编写的正规式的时候问题会变得更复杂。程序代码通常看起来更象是白噪声而不是Perl语言。对于这个问题有一个简单的解决办法是使用/x修饰符。
/x修饰符指示正规式忽略空白(空格,tab,回车等等。),使得你能够用这些字符把你的正规式代码格式化成更易读的格式。如果你确实需要正规式读取一个空格字符,你只需要在空格前面加上一个反斜杠。
/x修饰符还有另一个优点:它能够让你使用#号在你的正规式中加入注释。代码行中#后的所有字符都被认为是注释因此会被正规式忽略。
虽然/x修饰符通常会让你的正规式变得庞大,但是/x能够让文本格式化和注释成为可能,这能让你把代码对你自己和你后来的程序员来说变得更易读。
Perl中的一些东西看起来容易做起来难。举个例子:在一个字符串中寻找匹配的子串。例如解析一个日志文件中的一行可能会返回10 个数字的集合。一个split()函数可能就能够解决这个问题,但是更可靠的方法是使用一个正规表达式来寻找满足条件的子串:
# 对这个程序使用一个硬编码的值
$_ = "this is 123 first, the 234 second, the 345 third, and the 456 fourth";
$n=3; # 寻找第三个数字集合
$count=0;
while(/(d+)/g){
if(++$count==$n){
print "Number $n occurrence was ";
}
}
当程序运行的时候,这个例子会显示Number 3 occurrence was 345。它是一个简单的寻找特定正规表达式的循环;为了让这个循环寻找第三个单词,你可以用下面的语句替换掉while语句:
while(/(w+)/g) {