假设我只需要找出从文件中读取的一行是否包含来自有限 单词集的单词。
一种方法是使用 regex像这样:
.*\y(good|better|best)\y.*
另一种方法是使用像这样的伪代码:
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.
}
哪种方式会有更好的性能? (即速度和 CPU 利用率)
最佳答案
正则表达式的性能会更好,但要去掉那些 '.*' 部分。它们使代码复杂化并且没有任何作用。像这样的正则表达式:
\y(good|better|best)\y
将一次性搜索整个字符串。它从这个正则表达式构建的算法将首先查找\y,然后是字符 1 (g|b),然后是字符 2(g => go 或 b => be),字符 3(go => goo 或 be => bes |bet)、字符 4(go => good 或 bes => best 或 bet => bett)等。无需构建您自己的状态机,这会尽可能快。
关于c++ - 正则表达式与字符串 :find() for simple word boundary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706654/