c++ - 如何在 cpp 中使用 std::regex_replace() 函数查找和替换

标签 c++ regex

我正在做一个项目,我需要找到以 $< 开头并以 >$ 结尾的单词,并将其替换为存储在变量中的单词。

例子

string a ="hello";
string b = "Fellow $<world>$, full of $<smart>$ people"
std::cout<<std::regex_replace(b, "\\b($<)([^ ]*)(>$)\\b", a); //should print "Fellow hello, full of hello people"

但似乎这是不可能直接实现的。

我该如何解决这个问题?

最佳答案

除了两点,你的代码没有问题:

  • 正则表达式 - 你没有转义 $这意味着字符串结束\b $前后的单词边界这需要一个单词字符出现在 $ 旁边符号。
  • regex_replace 没有签名就像你用的那个。

所以,正确的正则表达式是

\$<[^<>]*>\$

\$匹配文字 $ , 然后是文字 < , 然后是 < 以外的 0 个或多个字符和 >直至文字 >$ .

在 C++ 中,您可以使用原始字符串 ( R"()" ) 来声明正则表达式对象,它将减轻两次转义元字符的痛苦。

参见 IDEONE demo :

string a ="hello";
string b = "Fellow $<world>$, full of $<smart>$ people";
std::cout<<std::regex_replace(b, std::regex(R"(\$<[^<>]*>\$)"), a);

输出:Fellow hello, full of hello people

关于c++ - 如何在 cpp 中使用 std::regex_replace() 函数查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384365/

相关文章:

c++ - 如何在对对象使用右值时适本地调用复制构造函数?

C++ std::sort 出现动态数组错误

c++ - 代码中未初始化的指针

javascript - 搜索 2 个字符串中的占位符值

PHP正则表达式查找以_开头的图像

python - mysql 中的正则表达式解析存储

c++ - 使用 SMTPS (TLS) 通过 gmail (smtp.gmail.com) 发送电子邮件的开源库

c++ - if 命名空间内的语句给出错误

javascript - 返回一些匹配项

SQL 查询进行反向 CONTAINS 搜索?