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

使用PowerShell正则提取C结构体至独立文件遇匹配异常求助

解决PowerShell提取C结构体到独立文件的问题

问题根源

你的脚本之所以把整个文件内容匹配成一个结构体,核心原因是**Get-Content默认按行读取文件,返回字符串数组**,Select-String处理该数组时会将所有行拼接成无换行的连续文本,导致你的正则错误匹配了从第一个struct到最后一个};的全部内容。

修复后的脚本

只需给Get-Content加上-Raw参数,将文件读取为单个多行字符串,让正则能正确识别跨行的结构体边界:

# 读取整个文件为包含换行的单个字符串
$file = Get-Content -Path "./types.h" -Raw
# 提取所有匹配的结构体
$structs = Select-String -Pattern "struct\s*([a-zA-Z0-9_]+)\s*{\s*(?:.*?\s*)*?}\s*;" -InputObject $file -AllMatches
Write-Output $structs.Matches.Count
foreach($struct in $structs.Matches) {
    New-Item "./$($struct.groups[1]).h" -Force -Value $struct.Value
}

关键修改说明

  • -Raw:让Get-Content保留文件原始换行格式,返回单个多行字符串,确保正则能匹配跨行的结构体内容。
  • -AllMatches:强制Select-String返回所有匹配结果,而非仅第一个匹配项。
  • 正则微调:将(?:.*\s*)*?改为(?:.*?\s*)*?,增强非贪婪匹配的可靠性,避免意外跨行匹配。

验证效果

运行修改后的脚本后,会生成两个符合预期的文件:

  • foo.h内容:
struct foo {

    int a;
};
  • bar.h内容:
struct bar{

    short i[200];
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:06:18