C ++正则表达式库,替换为函数指针

时间:2012-09-29 16:02:58

标签: c++ python regex function-pointers

寻找与Python的正则表达式subsubn方法类似的内容。

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

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

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

我可以在Python中放置repl的函数指针。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

然而,我应该补充一点,实际上这样做似乎相当不寻常 - 虽然标准很清楚它是否可能,但我不知道有关这个主题的任何书籍如何去做。