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
相关产品推荐
相关产品推荐

