c ++正则表达式匹配行的开头

时间:2018-05-31 17:10:50

标签: c++ regex

我有一个看起来像这样的字符串

text here++ text
+ text text
+ text
text text

我想用+替换 - 但只在行的开头替换它,看起来像这样:

text here++ text
- text text
- text
text text

我正在尝试这样的正则表达式:

string text = "the-above-text";
regex reg("^\\++.*$");
text = regex_replace(text, reg, "-");

但是这个^匹配文本的开头,而不是行的开头。

我一直在谷歌搜索几个小时,似乎没有办法让引擎在多线模式下工作。

有没有办法可以做到这一点?或者任何支持多行^和$的新c ++标准?我正在使用g ++

谢谢!

2 个答案:

答案 0 :(得分:3)

要匹配行尾或字符串开头,请使用(^|\n)替换组。

要替换单行+使用

的每条线路的1 + -个字符串
#include <iostream>
#include <regex>
using namespace std;

int main() {
    std::string s = "text here++ text\n+ text text\n+ text\ntext text";
    std::regex r("(^|\n)\\++");
    std::cout << std::regex_replace(s, r, "$1-") << std::endl;
    return 0;
}

请参阅C++ demo

请注意,要将换行符重新插入到结果中,引用组1值的$1占位符将用于替换模式(否则,它将被删除)。

答案 1 :(得分:1)

这对我有用..

#include <iostream>
#include <regex>

int main() {

    std::string text =
        "text here++ text\n" \
        "+ text text++\n"\
        "+ text++\n" \
        "text text";

    std::string result;
    std::regex re("(?:^|\n)\\++");
    result = std::regex_replace(text, re, "\n-");

    std::cout <<result << std::endl;
}

can be seen running here