我有一个输入...$1::integer,$2::varchar...
,我正在尝试计算$\d::\w+
模式的数量。所以,我有这个:
std::regex regex("(\\$\\d+\\:\\:\\w+(, ?){0,1})+?(\1)*?", std::regex_constants::icase);
std::match_results <const char *> matches;
std::regex_search(str.c_str(), matches, regex);
然而,这给出了结果:
$1::integer,$2::varchar
和
$2::varchar
如何更改模式以获取$1::integer
和$2::varchar
作为匹配项?
答案 0 :(得分:0)
你可以尝试
\$\d+::\w+(?=,|$)
进行了测试
模式说明:
\$ '$'
\d+ digits (0-9) (1 or more times)
:: '::'
\w+ word characters (a-z, A-Z, 0-9, _) (1 or more times)
(?= look ahead to see if there is:
, ','
| OR
$ the end of the string/line
) end of look-ahead
答案 1 :(得分:0)
好的,经过大量的实验和阅读后:
std::regex regex("\\$\\d+::\\w+");
auto els_begin = std::sregex_iterator(str.begin(), str.end(), regex);
auto els_end = std::sregex_iterator();
int matchCount = std::distance(els_begin, els_end);
for (std::sregex_iterator i = els_begin; i != els_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
// std::cout << match_str << '\n';
}