У меня есть регулярное выражение, чтобы проверить, содержит ли ячейка CSV правильного путь к файлу:RegExp бесконечный цикл только в perl, почему?
EDIT 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
но он все еще висит. Что мне не хватает?
Там нет коды вы выложили что может вызвать бесконечный цикл. – TLP
вместо возврата; попробуйте вернуться ""; –
Синтаксис 'if (...) return; else return; 'приведет к синтаксической ошибке в perl ... почему бы вам не вставить ваш * настоящий * код, включая цикл, который вы используете, тогда мы сможем вам помочь. – TLP