Corrigindo retrocesso catastrófico na expressão regular
Estou usando a seguinte expressão regular para verificar caminhos de arquivo válidos:
^(?:[a-zA-Z]\:\\|\\\\)([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})+$
Usando a cadeia de testeV:\Sample Names\Libraries\DeveloperLib\DeveloperComDlgs\res
é reconhecido como válido. Posso até adicionar caracteres inválidos ao início da string sem problemas. No entanto, quando adiciono um caractere inválido no final da string, a página da Web congela devido ao retorno catastrófico.
O que está causando isso nessa cadeia de caracteres regex?
Quebrando o RegexCadeia completa: ^(?:[a-zA-Z]\:\\|\\\\)([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})+$
Primeiro grupo: (?:[a-zA-Z]\:\\|\\\\)
Segundo grupo: ([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})
[^\\\/\:\*\?\<\>\"\|]+
Garante que não haja caracteres ilegais (\ /: *? <> "|)Segunda parte: (\\){0,1}
Verifica uma barra invertida entre as seções quantas vezes forem necessáriasEu acho que pode ser o{0, 1}
causando o problema, pois isso permite o retorno, mas não tenho certeza. Alguma ideia?