gpt4 book ai didi

regex - Powershell-MultiLine正则表达式拆分

转载 作者:行者123 更新时间:2023-12-02 23:50:10 25 4
gpt4 key购买 nike

我想做的是采取一个sql脚本块并去除'GO'语句。

我想我创建了一个合适的正则表达式; (?smi)(.*?)^GO$;好像在这里工作:https://regex101.com/r/Mg58zl/1

以下是我目前拥有的Powershell脚本;但我没有得到预期的结果。我似乎在整个输入上都取得了很大的成功。而不是2场比赛;每个代表GO分隔符内的语句。关于我这里有什么错误的任何想法吗?

#$fileContent = [io.file]::ReadAllText("C:\temp\script.sql")
$fileContent = @"
GO
IF NOT EXISTS (select 1
from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MyTable'
and COLUMN_NAME = 'NewColumn')
BEGIN
ALTER TABLE MyTable
ADD NewColumn bit not null DEFAULT(0)
END
go
IF NOT EXISTS (select 1
from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'AnotherTable'
and COLUMN_NAME = 'AnotherNewColumn')
BEGIN
ALTER TABLE AnotherTable
ADD AnotherNewColumn bit not null DEFAULT(0)
END
GO
"@
$matchInfo = $fileContent | Select-String '(?smi)(^.*?)^GO$' -AllMatches

最佳答案

请注意,(?m)GO$仅在字符串的末尾或仅以LF结尾的行与GO匹配。您需要在\r?之前添加$以匹配LF和CRLF结尾

您可以使用以下命令获取并打印捕获的子字符串(位于组1中)

[regex]::Matches($fileContent, '(?smi)(.*?)^GO\r?$') | % { "MATCH: $($_.Groups[1].value)`n--END OF MATCH---" }

请注意访问组1内存缓冲区的 $_.Groups[1].value。可以使用 $_.value访问匹配项。您可以对结果进行任何所需的操作,而不用打印。

关于regex - Powershell-MultiLine正则表达式拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61231271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com