c++ - 使用正则表达式替换 1 次迭代中的所有匹配项

标签 c++ regex boost-regex

是否可以在 1 次迭代中搜索不同的模式并替换匹配项?

例如,如果我有字符串

"Hey {Apple}, where is {Carrots|Peas|Cucumber}?"

是否可以在 1 次迭代中替换花括号内的所有内容,使其看起来像:

"Hey fruit, where is vegetables?

我问的原因是因为我当前的实现首先搜索所有在大括号内只有一个值的模式(1 次迭代),然后它在之后搜索具有 3 个值的大括号(2 次迭代),因此进行 x 次迭代,其中 x = "{}"。

谢谢大家,我希望这是有道理的。

最佳答案

这并不是真正的正则表达式问题,因为在字符串中进行替换超出了正则表达式的范围。

也就是说,这取决于图案的多样性。如果您有一组相对较小的模式,那么您可以设置一个从字符串到替换的映射,然后让您的输出迭代器查找它获得的每个匹配项的替换值。

例如,“Apple”会映射到“Fruit”,“Carrots”会映射到“vegetables”,“Peas”也会映射到“vegetables”等。

关于c++ - 使用正则表达式替换 1 次迭代中的所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11354040/

相关文章:

c++ - 如果需要,如何让 std::endl 输出 "\r\n"?

c++ - 访问不同类中的顶级变量和方法

C# 如何替换比匹配字符串更短的字符串?

c# - 如何将字符串拆分为数组

regex - 使用 OR 和 ^ 的 Boost Regex Lookbehind 无效

C++ 输出对齐和小数点占位符?

regex - 如何在lua中通过正则表达式重复匹配多个表达式

c++ - 如何使用boost C++解析8位十六进制数和字符串?

c++ - 如何在boost中定义正则表达式?

c++ - 十六进制到十进制与 char 给出奇怪的结果?