Я пытаюсь извлечь номер версии из строки с помощью регулярного выражения. Номер версии имеет формат «DDDc», где «D» - это цифры (может быть один или несколько экземпляров), а «c» - необязательный символ алфавита, окруженный пробелами с обеих сторон.
Строка, из которой я хочу извлечь ее, выглядит примерно так:
FOO 5.1.7d BAR 5.0.2 2019/06/18
Используемое мной регулярное выражение:
\s(\d+)\.(\d+)\.(\d+)([a-zA-Z])?\s
Ниже приведен кодЯ использую.
static regex FWVersionFormat{ R"(\s(\d+)\.(\d+)\.(\d+)([a-zA-Z])?\s)" };
auto matches = cmatch{};
if (regex_search(strVersion.c_str(), matches, FWVersionFormat))
{
int maj = 0, min = 0, maint = 0, build = 0;
if (!matches[1].str().empty()) maj = strtol(matches[1].str().c_str(), nullptr, 10);
if (!matches[2].str().empty()) min = strtol(matches[2].str().c_str(), nullptr, 10);
if (!matches[3].str().empty()) maint = strtol(matches[3].str().c_str(), nullptr, 10);
if (!matches[4].str().empty()) build = matches[4].str().c_str()[0] - ('a' - 1);
return{ maj, min, maint, build };
}
Это прекрасно работает, если в строке версии есть только одно совпадение, но проблема в том, что regex_search () помещает второй экземпляр версии в совпадения ("5.0.2").
Я хочу иметь возможность извлечь только первый матч. Есть ли способ сделать это с помощью регулярных выражений?