1

寻找类似于 Python 的正则表达式subsubn方法的东西。

http://docs.python.org/library/re.html

所以基本上像这样的C/C++ api

re.sub(pattern, repl, string, count=0, flags=0)

repl我可以像在 Python中那样放置函数指针。

4

2 回答 2

1

看看regex_replace

#include <iostream>
#include <regex>
#include <string>
int main()
{
   std::string text = "Quick brown fox";
   std::regex vowel_re("a|o|e|u|i");
   std::cout << std::regex_replace(text, vowel_re, "[$&]") << '\n';
}

输出:

Q[u][i]ck br[o]wn f[o]x
于 2012-09-29T16:10:45.957 回答
0

@Vikas 是正确的(至少我很确定他是)std::regex_replace可以做你想做的事,但他并没有真正展示如何做到这一点。当您使用regex_replace时,正则表达式的每次匹配都会产生一个regex::match对象。该对象的format成员函数使用您传递给的替换字符串regex_replace(以及您传递的标志)调用。

因此,要获得与您在 Python 中讨论的相同效果(为每个替换调用一个函数,而不仅仅是指定替换文本),您必须创建一个regex::match重载其format成员函数的对象,这就是将被调用的函数. 默认情况下,该标准regex::match::format可以进行 ECMAScript/Javascript 替换或sed替换(您可以传递一个标志来表示您喜欢的信号)。

但是,我应该补充一点,实际上这样做似乎相当不寻常——尽管标准非常清楚地表明这是可能的,但我不知道有任何关于该主题的书可以演示如何做到这一点。

于 2012-09-29T16:26:13.817 回答