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

如何让PowerShell的-Match运算符返回所有匹配至$Matches变量?

在PowerShell中获取正则的所有匹配项

PowerShell的-match运算符默认仅匹配第一个符合正则表达式的结果,$Matches哈希表也只会存储这第一个匹配的内容(包括捕获组),所以你会看到$Matches.Count返回1。而-replace运算符默认是全局替换行为,因此能处理所有匹配实例。

要获取所有匹配项并存储为数组,可以使用.NET框架的[regex]类静态方法Matches(),具体操作如下:

  1. 定义目标字符串和正则表达式
$targetStr = "This is **bold** and this is also **BOLD**,finally this is also **Bold**"
$pattern = '\*\*.*?\*\*'
  1. 使用[regex]::Matches()获取所有匹配
$allMatchObjects = [regex]::Matches($targetStr, $pattern)

该方法返回MatchCollection对象,包含所有匹配的详细信息(如匹配值、位置等)。

  1. 提取所有匹配的文本内容到数组
$matchTexts = $allMatchObjects | ForEach-Object { $_.Value }

此时$matchTexts就是包含所有匹配结果的数组,输出该变量会得到:

**bold**
**BOLD**
**Bold**

如果正则表达式包含捕获组,还可以遍历$allMatchObjects中的每个Match对象,通过其Groups属性获取分组内容,示例:

foreach ($match in $allMatchObjects) {
    Write-Host "匹配内容: $($match.Value)"
    # 若正则有分组,可通过Groups[index]获取对应分组值
    # Write-Host "捕获组内容: $($match.Groups[1].Value)"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:16:10