1.使用辅助空白字符和注释
/x选项可以同时用在匹配区和替换区,此时正则表达式解析器会忽略空白字符(被反斜杠转义的空白字符除外),同时忽略注释。
my ($str) =~ m / ( # $1 开始 * # 双引号字串开始 (?: \\\W | # 特殊字符,比如 \+ \\x[0-9a-fA-F]{2} | # 十六进制,比如\xDE \\[0-3][0-7]{2} | # 八进制, 比如\0377 [^"\\] #普通字符 )* “ ) # $1结束 /x ;
2.将复杂的正则表达式化整为零
正则表达式的优先级次于双引号内插变量。 我们可以利用这一点,用变量构造正则表达式。
my $whole = do { my $num = qr/[0-9]+/; my $word = qr/[a-zA-Z_]+/; my $space = qr/[ ]+/; qr/($num|$word|$space)/gx; }; $_="Testing 1 2 3"; my @split = /$whole/ ; print join(":",@split) , "\n" ;