我有多个正则表达式,每个表达式映射到一个不同的对象。传入一个字符串后,我想循环遍历每个正则表达式,直到一个计算结果为true,然后我想返回映射的对象。
在C ++中实现此功能的最佳方法是什么?是否有可用的增强对象?
答案 0 :(得分:2)
最简单的方法可能是最好的。
vector<pair<regex,Object>> regexes;
Object* find_it( string looking_for )
{
auto found = find_if( regexes, [&]( const pair<regex,Object>& thing )
{
return get<0>(thing).match(looking_for);
}
if( found != regexes.end() ) return & get<1>(*found);
return nullptr;
}
但是,简单的方法从来都不是一个有趣的答案。如果您使用Trie,您基本上可以快速查找样式<prefix>.*
的正则表达式。只需一点点想象力,您就可以为更具表现力的“正则表达式”提供更好的查找时间。但是,我怀疑你是否可以转换一个特里来有效地处理一般的正则表达式。但是......这可能很有趣......特里:)。
答案 1 :(得分:1)
假设您有这些包含正则表达式的对象的向量(或其他容器),您可以使用std::find_if
call执行此操作。棘手的部分是编写正确的谓词仿函数。