相关疑难解决方法(0)

你如何调试正则表达式?

正则表达式可能变得非常复杂.缺少空白区域使他们难以阅读.我无法通过调试器使用正则表达式.那么专家如何调试复杂的正则表达式呢?

regex debugging pcre

148
推荐指数
11
解决办法
3万
查看次数

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

问题

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

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

使用测试字符串V:\Sample Names\Libraries\DeveloperLib\DeveloperComDlgs\res被认为是有效的。我什至可以毫无问题地将无效字符添加到字符串的开头。但是,当我在字符串末尾添加无效字符时,网页会因灾难性的回溯而冻结。

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


分解正则表达式

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

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

  • 检查任一
    • 大写或小写字母,后跟冒号和反斜杠
    • 双反斜杠

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

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

我认为这可能是{0, 1}导致问题的原因,因为这允许回溯,但我不确定。有什么想法吗?

regex backtracking

5
推荐指数
1
解决办法
4155
查看次数

标签 统计

regex ×2

backtracking ×1

debugging ×1

pcre ×1