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

CMake中string(REGEX REPLACE仅替换首个匹配项问题求助

问题原因及解决办法

你的问题出在两个核心点:

  1. 正则未转义特殊字符:目标内容里的()是普通字符,但正则中()是捕获组的特殊标记,未转义会导致匹配逻辑偏离预期。
  2. 贪婪匹配覆盖多目标:原正则里的.*是贪婪量词,会一次性匹配尽可能多的内容,把多个独立的old_prefix(...)项当成一个整体,最终只执行一次替换。

修正后的代码

file(READ file.h FILE_CONTENT)
string(REGEX REPLACE "old_prefix\\((_[^)]*_postfix)\\)" "new_prefix(\\1)" FILE_CONTENT "${FILE_CONTENT}")
file(WRITE file.h "${FILE_CONTENT}")

关键调整说明

  • 给()添加转义符\\,让正则将其作为普通字符识别。
  • 把贪婪的.*替换为[^)]*,表示匹配除)之外的所有字符,确保每个old_prefix(...)都被单独匹配,不会跨项覆盖。
  • 给${FILE_CONTENT}加上双引号,避免内容中的空格、换行等特殊字符被错误解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:41:22