如何在PowerShell中使用递归正则匹配含嵌套括号的文本块
问题原因
PowerShell 底层依赖 .NET 正则引擎,不支持 PCRE 风格的递归分组语法 (?1),你将其修改为普通反向引用 \1 只能引用已捕获的固定文本,无法实现嵌套括号的递归匹配逻辑,这就是仅能匹配单层括号场景的核心原因。
解决方案
使用 .NET 正则特有的平衡组语法实现嵌套括号的成对匹配,同时开启正则单行模式(让.可以匹配换行符,支持跨多行匹配),正确命令如下:
$results = $myText | Select-String -Pattern '(?s)item\s*\((?>[^()]+|\((?<c>)|\)(?<-c>))*(?(c)(?!))\)' -AllMatches
执行后调用 $results.Matches.Value 即可获取到你预期的两个匹配结果。
内容的提问来源于stack exchange,提问作者nelson7455
相关产品推荐
相关产品推荐

