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

如何使用Select-String正则表达式匹配特定位置的闭合大括号

问题与解决方案

需求

给定字符串:

foo
}
bar}
    }
{baz}

需匹配**行首直接是闭合大括号},或行首带有一个及以上空白字符后紧跟}**的情况,目标选中第2行和第4行的}。

错误尝试

  • 仅匹配到第2行的},第4行未命中:

    "foo
    }
    bar}
        }
    {baz}" | Select-String "\n\s?}" -AllMatches
    

    原因:\s?仅允许0或1个空白字符,第4行的}前有多个空白,超出匹配范围。

  • 仅匹配到第4行的},第2行未命中:

    "foo
    }
    bar}
        }
    {baz}" | Select-String "\n\s+?}" -AllMatches
    

    原因:\s+要求至少1个空白字符,第2行的}前无空白,不符合匹配条件。

正确实现

使用行锚点^定位行首,结合\s*匹配0个或多个空白字符,即可覆盖两种目标场景:

$targetStr = @"
foo
}
bar}
    }
{baz}
"@

# 输出匹配到的内容
$targetStr | Select-String '^\s*}' -AllMatches | ForEach-Object { $_.Matches.Value }

执行后会输出:

}
    }

逻辑说明

  • ^:匹配行首位置,确保只检查每行开头的内容;
  • \s*:匹配0个或多个空白字符(包括空格、制表符),既兼容行首直接是}的情况,也兼容行首带多个空白的情况;
  • }:匹配目标闭合大括号;
  • -AllMatches:确保返回所有符合条件的匹配项;
  • 通过ForEach-Object { $_.Matches.Value }提取并输出匹配到的具体内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:30:19