【发布时间】:2014-05-28 14:23:39
【问题描述】:
我的目标是使用 boost::regex_search 捕获一个整数。
#define BOOST_REGEX_MATCH_EXTRA
#include <boost\regex.hpp>
#include <iostream>
int main(int argc, char* argv[])
{
std::string tests[4] = {
"SomeString #222",
"SomeString #1",
"SomeString #42",
"SomeString #-1"
};
boost::regex rgx("#(-?[0-9]+)$");
boost::smatch match;
for(int i=0;i< 4; ++i)
{
std::cout << "Test " << i << std::endl;
boost::regex_search(tests[i], match, rgx, boost::match_extra);
for(int j=0; j< match.size(); ++j)
{
std::string match_string;
match_string.assign(match[j].first, match[j].second);
std::cout << " Match " << j << ": " << match_string << std::endl;
}
}
system("pause");
}
我注意到每个正则表达式搜索都会产生两个匹配项。第一个是匹配的字符串,第二个是括号中的捕获。
Test 0
Match 0: #222
Match 1: 222
Test 1
Match 0: #1
Match 1: 1
Test 2
Match 0: #42
Match 1: 42
Test 3
Match 0: #-1
Match 1: -1
除非需要,否则文档不鼓励使用 BOOST_REGEX_MATCH_EXTRA。是否需要在括号内捕获单个匹配项,还是有其他方法?
【问题讨论】:
-
如果您可以链接到文档中提到不鼓励使用
BOOST_REGEX_MATCH_EXTRA的特定部分,那就太好了。还有另一种方法,但我更不鼓励使用括号(如果性能是原因)! -
@Jerry “其他方式”可能会更好。您是否针对 OP 的情况对其进行了分析?
-
@sehe “其他”方式(单独使用正则表达式)总是性能较差,这是功能和性能之间的权衡。
标签: c++ regex boost boost-regex