【发布时间】:2016-02-22 06:04:58
【问题描述】:
速度对我来说是非常非常重要的标准。这是我的字符串
DataInfoBlock1 {
Some description
}
DataInfoBlock2 {
Some other informations
}
Block3 {
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
Anything = vl;
}
我想获取每个块的名称和内部内容,我正在使用 c++ 正则表达式,这是我的正则表达式和正则表达式搜索代码
smatch Matches;
string Rgx("[[:blank:]]*([^]*?)[[:blank:]]*[{][[:blank:]]*([^]*?)[[:blank:]]*[}]", regex::optimize);
while(regex_search(str, Matches, Rgx))
{
}
我的结果是
Array[1]
Array[0] => DataInfoBlock1 {
Some description
}
Array[1] => DataInfoBlock1
Array[2] => Some description
,
...
...
我得到了完整的匹配,块名称和内部数据,但是速度非常非常糟糕(大约需要一秒钟)才能得到匹配!!!我应该怎么做才能更快地得到结果?这是正则表达式优化吗?我必须使用什么正则表达式来获得这样的结果,但在非常快的时间内?
【问题讨论】:
-
[^]有效吗?您可能会通过更明确地提高性能。也使用+而不是*。我认为。我不太了解正则表达式。 -
一切顺利,但我的问题是速度(完成时间)
-
您将问题标记为 boost - 您使用的是 boost regex 还是 C++11+ regex 库?您将其标记为 pcre 但这不是 pcre 语法boost.org/doc/libs/1_57_0/libs/regex/doc/html/boost_regex/…。
-
正如我在问题中所说,我使用的是普通的 c++ 正则表达式。我使用了 boost 和 pcre 标签,如果 pcre 或 boost 中有更好的报价,请指导我。
-
@user216086:这不是标签的用途,不要那样做