Я пытаюсь найти эффективный способ жадно найти первое совпадение для std::regex
без анализа всего ввода.
Моя конкретная проблема заключается в том, что я написал ручной лексер, и япытаясь предоставить правила для анализа общих литеральных значений (например, числового значения).
Итак, предположим простое, скажем,
std::regex integralRegex = std::regex("([+-]?[1-9]*[0-9]+)");
Есть ли способ найти самое длинное совпадение, начиная сначало ввода без сканирования всего этого?Похоже, std::regex_match
пытается сопоставить весь ввод, в то время как std::regex_search
принудительно находит все совпадения.
Возможно, мне не хватает тривиальной перегрузки для моей цели, но я не могу найти эффективное решение проблемы.
Просто чтобы прояснить вопрос: я не заинтересован в остановке после первого под-совпадения и игнорирую оставшуюся часть ввода, но для ввода, подобного "51+12*3"
Я хотел бы что-то, что находит сначала 51
матч, а затем останавливается, игнорируя все, что после.