You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell拆分SQL脚本时如何跳过单引号内及@前缀的GO拆分点

解决方案

你的思路是正确的

  • 你写的负向回顾断言(?<![\S])已经完美解决了@go这类前缀带非空白字符的误拆分问题
  • 要排除单引号内的GO,只需要在正则里加入单引号内容跳过规则即可,不需要复杂的逻辑改造

最终实现代码

直接替换你原来的拆分行即可:

$batches = $scriptData -split "'[^']*'(*SKIP)(*FAIL)|(?<![^\s])GO\b" | ForEach-Object {
    # 清理批处理内的多余换行、缩进和连续空格
    $cleanContent = $_ -replace '[\r\n\t]+', ' ' -replace '\s{2,}', ' '
    if ($cleanContent.Trim()) {
        $cleanContent.Trim() + "`r`nGO"
    }
}

正则规则说明

  • '[^']*'(*SKIP)(*FAIL):匹配所有单引号包裹的内容,命中后直接标记为跳过,不参与拆分匹配,完美规避单引号内的GO被识别
  • (?<![^\s])GO\b:你原有可用的规则,确保GO前面只能是空白字符或行首,且匹配完整的GO单词,避免@go、IdGo这类场景的误拆分

可选适配场景

  1. 如果你需要支持SQL里的转义单引号(即两个单引号代表一个单引号,比如'I''m GO'),把正则第一部分调整为:'(''|[^'])*'(*SKIP)(*FAIL)即可
  2. 如果你需要不区分大小写匹配GO(go/Go/gO都能作为拆分标记),给正则加不区分大小写修饰符:-split "(?i)'[^']*'(*SKIP)(*FAIL)|(?<![^\s])GO\b"

内容的提问来源于stack exchange,提问作者Raj K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:15:04