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

C++正则表达式如何匹配连字符(--)后不带前置符号空格的内容

问题原因

你当前写的正则(--)[\\s]*.+会将--、后续空格以及目标内容全部纳入完整匹配结果,因此输出会携带不需要的前缀。

解决方案

方案1:使用捕获组(兼容性最优,推荐)

通过捕获组单独圈选你需要的目标内容,正则修改为:

--\\s*(.+)

匹配完成后取第1个捕获组的内容即可拿到the pickle,完整C++示例代码如下:

#include <iostream>
#include <regex>
#include <string>

int main() {
    std::string input = "I      pick picked   --  the pickle";
    std::regex reg(R"(--\s*(.+))");
    std::smatch match_result;
    if (std::regex_search(input, match_result, reg)) {
        // match_result[0] 是完整匹配结果,match_result[1] 是第一个捕获组内容
        std::cout << match_result[1].str() << std::endl;
    }
    return 0;
}

方案2:使用正向零宽后顾断言(无需取捕获组)

如果你的编译器支持可变长度的后顾断言,可以直接写正则匹配目标内容,不需要额外取捕获组:

(?<=--\\s{0,100}).+

注:C++标准库默认的ECMAScript正则语法对可变长度后顾断言支持度有限,部分旧版本编译器可能不兼容,因此优先推荐方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:07