У меня есть строка «CCCC», и я хочу совместить с ней «CCC» с перекрытием.Регулярное выражение C++ для совпадающих совпадений
Мой код:
...
std::string input_seq = "CCCC";
std::regex re("CCC");
std::sregex_iterator next(input_seq.begin(), input_seq.end(), re);
std::sregex_iterator end;
while (next != end) {
std::smatch match = *next;
std::cout << match.str() << "\t" << "\t" << match.position() << "\t" << "\n";
next++;
}
...
Однако это только возвращает
CCC 0
и пропускает CCC 1
решение, которое необходимо для меня.
Я читал о неживых '?' совпадение, но я не смог заставить его работать
Спасибо, что решили его , Я отмечу это как можно скорее, как только смогу. –
Это приводит к бесконечному циклу на яблочном clang. –
@RichardHodges: Он должен быть связан с [этим] (http://stackoverflow.com/questions/33795759/c-mac-os-x-regex-causes-infinite-loop-with-regex-replace/33799633#33799633): реализация Mac не эффективно обрабатывает пустые совпадения. Добавленный '' 'после поиска может решить проблему: [' std :: regex re ("(? = (CCC))."); '] (Https://ideone.com/pEziQp). Если символы разрыва строки должны быть сопоставлены, '.' следует заменить на' [\ s \ S] '. –