如果字符串在Perl中仅包含ASCII字母数字,短划线,下划线和点字符,则匹配

时间:2015-01-04 12:30:17

标签: regex string perl

我有以下Perl脚本,如果字符串只包含以下字符a-z A-Z短划线-下划线_或点.,则会写入OK string包含任何其他字符。但是,无论我在字符串$ref中添加什么,它都会写入。

在此示例中,匹配应失败,因为字符串包含+ \/

#!/usr/bin/perl

 print "Content-type: text/html\n\n";   

 $ref = 'abcABCZ01234+56789.htm_abc\/--a'; 

 if ($ref =~ m/[a-zA-Z_0-9\-\.]/) { print "OK\n\n"; }
 else { print "FAIL\n\n"; }

 print "<br>$ref\n\n"; 

1;

2 个答案:

答案 0 :(得分:2)

当你的正则表达式找到满足正则表达式类的第一个字符时匹配,但为了确保所有字符都在正则表达式类中,你必须声明它从开始^到字符串结尾{{1 }},

\z

答案 1 :(得分:2)

你只需要添加锚点和量词:

if ($ref =~ /^[a-zA-Z_0-9.-]+$/) { print "OK\n\n"; }
#            ^              ^^