正则表达式从c ++函数调用中提取函数

时间:2016-02-24 18:49:30

标签: c++ regex

我必须从各种c ++函数调用中提取函数名。以下是一些函数调用示例和提取的函数名称。

  • std::basic_fstream<char,std::char_traits<char> >::~basic_fstream<char,std::char_traits<char> > 〜basic_fstream的
  • CSocket::Send发送
  • CMap<unsigned int,unsigned int &,tagLAUNCHOBJECT,tagLAUNCHOBJECT &>::RemoveAll Cerner::Foundations::String::Rep::~Rep〜代表

  • CCMessage::~CCMessage ~CCMessage

  • std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,u _树
  • Lib::DispatcherCache::~DispatcherCache〜DispatcherCache
  • CPrefDataObjectLoader<CPrefManagerKey,CPrefManagerValue,CGetPrefManager,PrefManagerKeyFunctor>::Get获取

    以下正则表达式适用于大多数功能

  • /((?:[^:]*))$';/此正则表达式从最后一个获取字符串:
  • /+?(?=<)';/这个删除以&lt;
  • 开头的字符串

但对于std::basic_fstream<char,std::char_traits<char> >::~basic_fstream<char,std::char_traits<char> >,我得到的输出是char_traits,因为此字符串位于最后一个':'之后,但结果应为~basic_fstream。有没有办法可以将两个正则表达式结合起来并忽略<>内的所有内容?

1 个答案:

答案 0 :(得分:3)

C ++的语法不仅不规则,而且实际上对上下文敏感(特别是在模板附近)。即使是一个合适的CFG解析器也无法帮助你,更不用说一个普通的旧正则表达式了......为什么不使用一个实际的工具来完成工作呢?如果要解析C ++,请使用C ++解析器,例如libclang