Reg*_*kie 5 c++ regex performance search
假设我只需要找出从文件读取的一行是否包含有限单词集中的单词。
一种方法是使用如下的正则表达式:
.*\y(good|better|best)\y.*
Run Code Online (Sandbox Code Playgroud)
实现此目的的另一种方法是使用如下伪代码:
if ( (readLine.find("good") != string::npos) ||
(readLine.find("better") != string::npos) ||
(readLine.find("best") != string::npos) )
{
// line contains a word from a finite set of words.
}
Run Code Online (Sandbox Code Playgroud)
哪种方式会有更好的性能?(即速度和CPU利用率)
正则表达式的性能会更好,但要去掉那些“.*”部分。它们使代码变得复杂并且没有任何作用。像这样的正则表达式:
\y(good|better|best)\y
Run Code Online (Sandbox Code Playgroud)
将一次性搜索整个字符串。它根据此正则表达式构建的算法将首先查找 \y,然后查找字符 1 (g|b),然后查找字符 2(g => go 或 b => be)、字符 3(go => goo 或 be => bes |bet)、字符 4(go => good 或 bes => best 或 bet => bett)等。无需构建自己的状态机,这就是最快的速度。