慢速正则表达式代码[英] Slow Regex Code

问题描述

仍在学习 C++.我正在使用 boost 编写一些正则表达式.效果很好.
唯一的问题是......与等效的 Perl 相比,这段代码对我来说似乎很慢
和 Python.我确定我做错了什么.有什么建议吗?

#include <boost/regex.hpp>
#include <iostream>

//g++ numbers.cpp -o numbers -I/usr/local/include/boost-1_35
/usr/local/lib/libboost_regex-gcc41-mt-s.a
//g++ numbers.cpp -o numbers.exe
-Ic://Boost/include/boost-1_35://Boost/lib/libboost_regex-mgw34-mt-s.lib

void number_search(const std::string& 部分)
{

static const boost::regex Numbers("\\b\\d{9}\\b");
static const boost::regex&rNumbers = 数字;
boost::smatch 匹配;

std::string::const_iterator 开始 = part.begin();
std::string::const_iterator End = part.end();

while (boost::regex_search(Start, End, matches, rNumbers))
{
std::cout <<匹配.str() <<标准::endl;
开始 = 匹配[0].second;
}
}

int main()
{
std::string 部分;
while (std::getline(std::cin, part))
{
number_search(部分);
}
返回0;
}

推荐答案

6 月 8 日下午 6:32,brad <byte8b...@gmail.com 写道:
还在学习C++.我正在使用 boost 编写一些正则表达式.它
效果很好.唯一的问题是......这段代码对我来说似乎很慢
与等效的 Perl 和 Python 相比.
看起来很慢,或者明显更慢.有两个
可能性:

1. 只是看起来比较慢,因为剩下的代码是
明显更快,或者

2.确实比较慢,因为perl和python都可以编译
转化为某种高效的字节码,因为它们已经
有一个"执行";机器为此类字节码加载.

注意纯(非扩展)正则表达式可以做成
运行速度要快得多,因为它们可以转换为纯
DFA.我自己的正则表达式类就是这样做的.对于大多数
但是,出于目的, boost:regex 将足够快,并且值得
增加的灵活性.(我自己的正则表达式类是
专为非常特定的用途而设计.不需要的地方
扩展,但它确实需要一些额外的功能
不在Boost中.对于大多数一般用途,boost::regex 是
最好.)

--
James Kanze (GABI Software) 电子邮件:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l''école, France, +33 (0)1 30 23 00 34

布拉德写道:
//g++ numbers.cpp -o numbers -I/usr/local/include/boost-1_35
/usr/local/lib/libboost_regex-gcc41-mt-s.a
//g++ numbers.cpp -o numbers.exe
-Ic://Boost/include/boost-1_35://Boost/lib/libboost_regex-mgw34-mt-s.lib
对于初学者,您可以尝试添加一些优化标志,例如
-O3 和 -march=<你的架构(例如 -march=pentium4).

(不,我不知道这是否会使正则表达式匹配更快,但它
试试看也无妨.)

2008 年 6 月 8 日星期日 12:32:30 -0400,布拉德 <by*******@gmail.com 写道:
>我正在使用 boost 编写一些正则表达式.效果很好.
唯一的问题是……与等效的 Perl
和 Python 相比,这段代码对我来说似乎很慢.我确定我做错了什么.有小费吗?
试试 PCRE.

--
罗兰·皮宾格
"最好的软件是简单、优雅、充满戏剧性"- 格雷迪·布奇

本文地址:https://www.itbaoku.cn/post/1050841.html