【问题标题】:Regex to identify valid filepath and filename is too slow正则表达式识别有效文件路径和文件名太慢
【发布时间】:2018-07-10 22:15:23
【问题描述】:

我有一个 C# 应用程序,它需要识别给定的字符串是否是有效的 Windows 文件路径,该路径以带扩展名的文件名结尾。目前我有:

public static bool IsValidWindowsFilePathWithFileName(string filepath)
{
    string scriptFilePathPattern = @"^[A-Za-z]:(\\\w+(\s*\w+)*)*(\\\w+(\s*\w+)*\.[a-zA-Z]\w*)$";
    return Regex.IsMatch(filepath, scriptFilePathPattern);
}

这通常可以正常工作。但是,如果我输入以长字符串结尾的内容,例如

“C:\Windows\System32\ThisIsALongBadFileName”

处理需要几分钟时间。有没有更好的方法来做到这一点?

【问题讨论】:

  • stackoverflow.com/q/62771/62576 中的一种解决方案有什么问题,另外,Windows 文件名不需要以扩展名结尾。
  • 提供什么是有效的,什么是无效的例子。说路径是错误的......没有提供足够的信息。
  • 请停止使用字符串或正则表达式验证文件名。 That doesn't work。验证文件名的唯一方法是尝试创建它并查看它是否在运行时引发异常。
  • 分钟?你在做什么?
  • 你为什么不使用 File.Exists(string path)?

标签: c# regex filepath


【解决方案1】:

在可能的情况下删除*(零个或更多)并替换为+ 1 个或更多。每使用一个*,都会增加解析器的回溯。如果您知道不存在 zero 条件,请不要将其放入...使用+

【讨论】:

    【解决方案2】:

    我决定简单地接受任何不以斜杠结尾的文件路径都是有效的,而不是试图监管合法的文件名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-07
      • 2010-09-19
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2014-08-03
      相关资源
      最近更新 更多