Regex Powershell搜索到特定关键字

Regex Powershell搜索到特定关键字,regex,powershell,search,Regex,Powershell,Search,我试图搜索和提取以特定关键字开头的句子,以及存在于/开始/结束于关键字之间的句子。其目的是提取以“ALTER TABLE”开头的句子,这些句子要么嵌套在“GO”关键字之间,要么包含GO的begin或end块。GO关键字之间存在的句子数可以是任意的。这是我的示例文件和为实现它而编写的代码 SampleFile.sql的内容 ALTER TABLE [dbo].[test1] ADD [country] VARCHAR (30) NULL; GO alter procedure

我试图搜索和提取以特定关键字开头的句子,以及存在于/开始/结束于关键字之间的句子。其目的是提取以“ALTER TABLE”开头的句子,这些句子要么嵌套在“GO”关键字之间,要么包含GO的begin或end块。GO关键字之间存在的句子数可以是任意的。这是我的示例文件和为实现它而编写的代码

SampleFile.sql的内容

ALTER TABLE [dbo].[test1]    
    ADD [country] VARCHAR (30) NULL;
GO
alter procedure 
    some procedure code
GO
ALTER TABLE 
    something;
GO
PROCEDURE ALTER TABLE;
Drop table;
GO
ALTER TABLE [dbo].[test2]    
    ADD [continent] VARCHAR (30) NULL;
我的代码

$path = 'D:\Script'
$sampleFile = 'SampleFile.sql'
$search = "ALTER TABLE"
(GC $path\$sampleFile -Delimiter 'GO') -match "^$search*"

使用这段代码,我只能获取第一组ALTER的内容,直到开始。如果避免使用插入符号正则表达式(^),则会打印“ALTER TABLE”的所有实例(在下一个GO之前,还将包括“PROCEDURE ALTER TABLE”一句)。只需要以“ALTER TABLE”开头的句子

您只需要多行修改器:

(GC $path\$sampleFile -Delimiter 'GO') -match "(?m)^$search*"
                                                ^^^
这将使
^
匹配一行的开头,而不是整个字符串