【发布时间】:2016-08-09 10:09:10
【问题描述】:
你好,这是我的字符串:
key{info('1'),details('1'),others('{"1": "2test data1", "2": "2test data2"}')}
我制作了超过 100 万条这条线,并将它们放在一个类似(相同)的文件中
key{info('1'),details('1'),others('{"1": "2test data1", "2": "2test data2"}')}
key{info('1'),details('1'),others('{"1": "2test data1", "2": "2test data2"}')}
key{info('1'),details('1'),others('{"1": "2test data1", "2": "2test data2"}')}
key{info('1'),details('1'),others('{"1": "2test data1", "2": "2test data2"}')}
key{info('1'),details('1'),others('{"1": "2test data1", "2": "2test data2"}')}
..
..
..
现在,我想使用正则表达式
key[{]info[(][']1['][)],details[(][']1['][)],others[(]['][{](.*?)[}]['][)][}]
(获取每一行(其他)里面)
我在 PHP 中使用preg_match_all 函数对其进行了测试,我很惊讶 PHP 在 3 秒 内检测到所有 100 万行,但我真正的程序是用 C++ 编写的,所以我尝试了这个正则表达式在 C++ 上
regex RegexString(R"~(key[{]info[(][']1['][)],details[(][']1['][)],others[(]['][{](.*?)[}]['][)][}])~", regex_constants::optimize);
我很惊讶,但这次很糟糕。在10 Min regex 得到所有行之后(检测)
我使用了 Boost 并获得了更好的结果(2 分钟),但是我在 PHP (PCRE) 中看到的(3 秒)让我抓狂......现在,我该怎么办?
在 Boost 或标准 C++ 正则表达式中有什么方法可以提高速度(在 3-10 秒内完成)还是我必须在我的 C++ 项目中使用 PCRE?
结果
正则表达式:10 分钟
提升:2 分钟
Pcre(PHP) : 3 秒
【问题讨论】:
-
没有帮助!!!我只是想知道我是否可以在 boost 中优化这个正则表达式请告诉我什么是最好的优化或者如果没有办法提高速度我将使用 pcre
-
您确定时差是正则表达式的结果而不是其他原因吗?您是在循环内编译正则表达式还是什么?
-
@Elh48 你能不能别喊“!!!”
-
你能告诉我你想从样本输入中提取的确切内容吗?我将向您展示一种可能更快的方法。