Perl 正则表达式 取值
各位高手,小弟有个问题,请教大家
$_="123.zip 234.zip 345.zip 987456";if(/(.*.zip)/){ print $1; print $2; print $3;}
my $str="123.zip 234.zip 345.zip 987456";while($str=~/(\d+\.zip)/g){ print("$1\n");}if($str=~/(\d+\.zip)\s+(\d+\.zip)\s+(\d+\.zip)/){ print("$1\n"); print("$2\n"); print("$3\n");}
[解决办法]
因为只有一对括弧,所以只有$1进行了匹配
[解决办法]
123.zip中的点号需要转义
$_="123.zip 234.zip 345.zip 987456";@t=$_=~/(\d+\.zip)/g;print "@t\n";
[解决办法]
问题很多:
1. 不要使用$_做自己的变量名。
2. .*是贪婪匹配,会匹配整个"123.zip 234.zip 345"
3. .zip的.需要转义
4. $1是取正则表达式第一个括号的匹配内容,$2是第二个括号,$3是第三个括号。你的表达式里只有一个括号当然无法匹配。
5. 正则表达式默认是只匹配一次的。
6. 注意你代码里的空白。在适当的地方加入空格和缩进,否则看起来不舒服。
7. 取整个匹配用$&就可以,不需要加那么一对大括号。
my $s = "123.zip 234.zip 345.zip 987456";my @all = $s =~ /\S+\.zip/g;