【发布时间】:2012-07-20 12:23:19
【问题描述】:
我正在使用std::regex,在阅读std::regex_constants 中定义的各种常量时,我遇到了std::optimize,读到它,听起来它在我的应用程序中很有用(我只需要一个实例正则表达式,在开始时初始化,但在整个加载过程中多次使用)。
根据working paper n3126(第1077页),std::regex_constants::optimize:
指定正则表达式引擎应该更关注正则表达式匹配的速度,而不是构造正则表达式对象的速度。否则对程序输出没有可察觉的影响。
我很好奇将执行哪种类型的优化,但似乎没有太多关于它的文献(实际上,它似乎未定义),我发现的唯一内容之一是@987654322 @,表示std::regex_constants::optimize:
指示正则表达式引擎加快匹配速度,但可能会降低构建速度。例如,这可能意味着将非确定性 FSA 转换为确定性 FSA。
但是,我没有正式的计算机科学背景,虽然我了解 FSA 的基础知识,并了解确定性 FSA 之间的基本区别(每个状态只有一个可能的下一个状态),并且一个非确定性的 FSA(具有多个潜在的下一个状态);我不明白这如何提高匹配时间。另外,我很想知道在各种 C++ 标准库实现中是否还有其他优化。
【问题讨论】:
-
为了比较,关于 Perls
/o正则表达式优化,有一个 discussion here on SO。对于 Perl 来说,这些优化实际上已经不再有用了。 in the Friedl book 详细讨论了更好的优化技术(关于正则表达式本身的结构)。
标签: c++ regex optimization c++11