我必须从各种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
。有没有办法可以将两个正则表达式结合起来并忽略<>
内的所有内容?
答案 0 :(得分:3)
C ++的语法不仅不规则,而且实际上对上下文敏感(特别是在模板附近)。即使是一个合适的CFG解析器也无法帮助你,更不用说一个普通的旧正则表达式了......为什么不使用一个实际的工具来完成工作呢?如果要解析C ++,请使用C ++解析器,例如libclang。