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"');
EDITは実際にこれでループします:
ValidateUNCPath('"""\aaaaaaaaa\bbbbbbb\ccccccc\Netwxn00.map"');
http://regexpal.comで、正規表現がこれらの非対称の "" "..."を二重引用符で囲んで正しくキャッチすることを確認しましたが、Perlは彼自身の心を持っていました:(
/gフラグと/oフラグも試しました
/$FILENAME_REGEXP/go
しかし、それでもハングします。私は何が欠けていますか?