#include <stdio.h>
#include <regex.h>
#include <stdlib.h>

#define STRING "Abcde19:36zxc. Aasd 01:12 yyy. Qqq 24:45=0.53. Takie dela. 11:17 00:00, odnako." // пример строки
#define PATTERN "(([0-1][0-9])|(2[0-3])):([0-5][0-9])" // регулярное выражение для времени

int main() {
	char * s = STRING;
	regex_t * preg = (regex_t*)malloc(sizeof(regex_t));
	regcomp(preg, PATTERN, REG_EXTENDED);

	int nmatch = 16; // я так полагаю, это максимальное число ищущихся совпадений
	regmatch_t * pmatch = (regmatch_t *)malloc(nmatch * sizeof(regmatch_t));
	regexec(preg, s, nmatch, pmatch, 0);

	for (int i = 0; i < nmatch; ++i) {
		for (int j = pmatch[i].rm_so; j < pmatch[i].rm_eo; ++j) {
			printf("%c", s[j]);
		}
		printf("\n");
	}
}
