我们在一个更面向 SQL 的项目中使用 RoundhouseE 迁移工具。我发现了一个非常奇怪的错误
某个 SQL 函数脚本(遗憾的是我无法提供该脚本,因为它是我客户的属性)使得 RegEx 的 Replace 方法永远不会返回
正则表达式看起来像这样
(?<KEEP1>^(?:[\s\t])*(?:-{2}).*$)|(?<KEEP1>/{1}\*{1}[\S\s]*?\*{1}/{1})|(?<KEEP1>'{1}(?:[^']|\n[^'])*?'{1})|(?<KEEP1>\s)(?<BATCHSPLITTER>GO)(?<KEEP2>\s)|(?<KEEP1>\s)(?<BATCHSPLITTER>GO)(?<KEEP2>$)
RounhouseE 中永不返回的代码行
string sql_statement_scrubbed = regex_replace.Replace(sql_to_run, match => evaluate_and_replace_batch_split_items(match, regex_replace));
问题不在于evaluate_and_replace_batch_split_items
实际的 regex.Replace 方法中的委托,我在一个简单的正则表达式工具中尝试了正则表达式,它也挂起。也许这里的 RegEx 专家可以看到问题所在?
编辑:如果我从这个sql注释中删除'-- If no previous, don't report revised
(撇号)
它可以工作,但它不仅必须是脚本中其他文本的组合,因为该行独立工作