代码之家  ›  专栏  ›  技术社区  ›  Sara Fuerst

修复正则表达式中的灾难性回溯

  •  2
  • Sara Fuerst  · 技术社区  · 7 年前

    我使用以下正则表达式检查有效的文件路径:

    ^(?:[a-zA-Z]\:\\|\\\\)([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})+$
    

    使用测试字符串 V:\Sample Names\Libraries\DeveloperLib\DeveloperComDlgs\res 被视为有效。我甚至可以在字符串的开头添加无效字符,而不会出现问题。然而,当我在字符串末尾添加一个无效字符时,网页因灾难性回溯而冻结。

    是什么导致这个正则表达式字符串出现这种情况?


    完整字符串: ^(?:[a-zA-Z]\:\\|\\\\)([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})+$

    第一组: (?:[a-zA-Z]\:\\|\\\\)

      • 双反斜杠

    ([^\\\/\:\*\?\<\>\"\|]+(\\){0,1})

    • [^\\\/\:\*\?\<\>\"\|]+
      • 确保没有非法字符(\/:*?<“|”)
    • (\\){0,1}
      • 根据需要多次检查节之间的反斜杠

    我认为可能是 {0, 1}

    1 回复  |  直到 4 年前