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

能否用regexec在特定结构二进制文件中直接搜索账户名?

问题解答

你说得没错,直接用regexec对整个二进制文件做正则搜索是不可行的,除了你提到的0字节终止问题,还有几个关键原因:

  • C风格字符串的终止限制:regexec的设计目标是处理以\0结尾的C字符串,它会在遇到第一个\0字节时停止解析。而你的name字段是固定40字节的数组,未被名字占用的部分会被填充\0;更不用说记录里的int和float字段完全可能包含值为0的字节——这些都会让regexec提前终止,根本无法遍历到后续的name字段。

  • 无法识别结构体边界:regexec会把整个二进制文件当成无结构的字节流,它不知道每个acct_info_t记录的起始和结束位置,也没法区分name字段和后面的number、balance字段。这会导致大量跨字段的无效匹配,完全达不到你要搜索name字段的目的。

  • 关于文件加载的问题:其实处理这类结构化二进制文件,通常需要把数据加载到内存(或分块加载),但核心问题不是加载本身——你必须遍历每条记录。只有按照sizeof(acct_info_t)的步长(注意要考虑系统的内存对齐规则,结构体实际大小可能比字段总和大)去逐块定位,才能准确找到每个name字段的范围,再对单独的name字段进行正则匹配。

可行的替代方案

正确的处理流程应该是:

  1. 将二进制文件内容(或分块)加载到内存中
  2. 以sizeof(acct_info_t)为步长遍历每个acct_info_t记录
  3. 提取当前记录的name字段(可以根据需求截断末尾的\0,或者直接把整个40字节作为匹配缓冲区)
  4. 对提取出的name内容单独调用regexec进行正则匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:01:27