是正则是查看字符串是否是另一个弦的好方法
Is regex a good way to see if a string is a substring of another?
假设我有一个固定的字符串列表。
对于任何输入字符串,我想找出列表中的哪个字符串是输入字符串的子字符串,或者列表中没有这样的字符串。
我这样做的方法是:对于列表中的每个字符串,将其作为模式并使用正则匹配,以查看它是否与某处的输入字符串匹配。
正在使用正则高速公路方法?
谢谢。
它在C 中。该计划是使用C 标准库或Boost库。
绝对过度杀伤。REGEX需要编译构造模式,您只是在持续的子字符串进行线性搜索。标准lib具有您的需求:http://www.cplusplus.com/reference/string/string/string/find/
一般而言,否,以下是在字符串中查找固定子字符串的好方法。
有几种用于子字符串搜索的算法比逐字节搜索更快。其中最受欢迎的是Boyer-Moore。该网站列出了大多数知名的网站,包括Boyer-Moore及其变化:http://www-igm.univ-mlv.fr/~lecroq/string/index.html。
但是,大多数正则发动机实际上在内部使用Boyer-Moore来提高性能(Regex引擎之间的竞争实际上是一回事)。因此,在某些情况下,Regexp 是做到这一点的好方法。
但是。由于您提到了您使用的boost,因此您应该能够直接使用Boost的boyer_moore_search()
而无需求助于正则是Regex。
确实要注意,如果您的搜索字符串很小,则Boyer-Moore效率低下。还有其他算法将其用于小型搜索字符串。因此,您可能需要进行一些研究,并将算法与您自己的典型搜索字符串进行比较。但总的来说,博耶·莫尔(Boyer-Moore)是一个不错的选择。
- C++从另一个类访问公共静态向量的正确方法是什么
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 检查哪个对象调用了另一个对象的对象方法
- 不能将方法返回的值用于另一个方法
- Qt将信号与另一个类方法连接
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 将一个类的方法指针存储到另一个类中
- 从另一个标头中的标头调用静态方法
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 如果类"A"具有指向另一个类的指针,则"B" A 可以访问 B 类公共方法
- 如何在另一个类中使用类成员的正确方法?
- 重写另一个方法 [C++] 使用的超类回调函数
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 覆盖作为另一个类的好友的虚拟受保护方法
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 返回一个引用C++中另一个类对象的对象的有效方法