我有一个看起来像这样的字符串
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 ++
谢谢!
答案 0 :(得分:3)
要匹配行尾或字符串开头,请使用(^|\n)
替换组。
要替换单行+
使用
-
个字符串
#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;
}