我有一个正则表达式来测试 CSV 单元格是否包含正确的文件路径:
编辑CSV 列出了脚本运行时尚不存在的文件路径(我不能使用 -e),并且文件路径可以包括 * 或 %variable% 或 {$variable}。
my $FILENAME_REGEXP = '^(|"|""")(?:[a-zA-Z]:[\\\/])?[\\\/]{0,2}(?:(?:[\w\s\.\*-]+|\{\$\w+}|%\w+%)[\\\/]{0,2})*\1$';
由于 CSV 单元格有时包含双引号的包装,有时文件名本身需要用双引号括起来,我做了这个分组 (|"|""") ... \1
然后使用这个函数:
sub ValidateUNCPath{
my $input = shift;
if ($input !~ /$FILENAME_REGEXP/){
return;
}
else{
return "This is a Valid File Path.";
}
}
我正在尝试测试这个短语是否与我的正则表达式匹配(它不应该匹配):
"""c:\my\dir\lord"
但是我亲爱的 Perl 在以下情况下会进入无限循环:
ValidateUNCPath('"""c:\my\dir\lord"');
编辑实际上它循环这个:
ValidateUNCPath('"""\aaaaaaaaa\bbbbbbb\ccccccc\Netwxn00.map"');
我在http://regexpal.com中确保我的正则表达式正确捕获了那些非对称的 """ ..." 包装双引号,但 Perl 有自己的想法:(
我什至尝试了 /g 和 /o 标志
/$FILENAME_REGEXP/go
但它仍然挂起。我错过了什么?