
人们常常抱怨Perl正则表达式难以理解。解决这个问题的一种简单方法就是使用Perl扩展正则表达式语法,该语法允许我们在正则表达式中嵌入注释和多余的空白符来增强易读性。
使用“/x”开关来可以让Perl忽略正则表达式中的绝大多数空白符(尽管字符类依然包括空白符)。为了匹配空白符,你可以使用字符类或者空白符匹配标记“/s”。使用“/x”也允许你使用标准Perl注释,井号(#)与行尾之间的字符即为标准Perl注释。
对那些非常简单的正则表达式来说,表达式前面的一行注释就足以说明它的用法了。然而,比较复杂的表达式需要更详尽的注释。
例如,下面给出了的用于解析URL的正则表达式(如果没有注意,就很难读懂这个表达式。)
$uri =~ m{^
(?:([^:/?#]+):)? #
optional scheme - http:, ftp:, mailto:, etc.
(?://([^/?#]*))? #
optional server
([^?#]*) # path
(?:?([^#]*))? #
optional query string
(?:#(.*))? # optional
fragment
}x;
在分段描述(fragment description)中有必要在井号之前使用斜线(/)进行转义处理,否则Perl会认为井号开始到行结束的语句都是注释。不过,在其它行就没有必要进行转义处理,这是因为它们各自是字符类的一部分,因为不可能是注释起始符。
通过在复杂的正则表达式中嵌入注释,你可以增加代码的易读性并降低日后维护所花费的代价。