#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
#define MAX_PART_LEN 256
void split_message(const char *message, char *part1, char *part2, char *part3, char *part4) {
regex_t regex;
int reti;
char pattern = "^\[(\d+),"([a-f0-9\-]+)","([A-Za-z]+)",({.})\]$";
reti = regcomp(®ex, pattern, REG_EXTENDED);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
regmatch_t matches[5];
reti = regexec(®ex, message, 5, matches, 0);
if (!reti) {
if (matches[1].rm_so != -1) {
strncpy(part1, message + matches[1].rm_so, matches[1].rm_eo - matches[1].rm_so);
part1[matches[1].rm_eo - matches[1].rm_so] = '\0';
}
if (matches[2].rm_so != -1) {
strncpy(part2, message + matches[2].rm_so, matches[2].rm_eo - matches[2].rm_so);
part2[matches[2].rm_eo - matches[2].rm_so] = '\0';
}
if (matches[3].rm_so != -1) {
strncpy(part3, message + matches[3].rm_so, matches[3].rm_eo - matches[3].rm_so);
part3[matches[3].rm_eo - matches[3].rm_so] = '\0';
}
if (matches[4].rm_so != -1) {
strncpy(part4, message + matches[4].rm_so, matches[4].rm_eo - matches[4].rm_so);
part4[matches[4].rm_eo - matches[4].rm_so] = '\0';
}
} else {
fprintf(stderr, "Could not match message\n");
exit(1);
}
regfree(®ex);
}
int main() {
const char *message = "[2,"0f7903ba-dbeb-4de7-9d31-22a654524630","GetConfiguration",{"key":["NumberOfConnectors"]}]";
char part1[MAX_PART_LEN], part2[MAX_PART_LEN], part3[MAX_PART_LEN], part4[MAX_PART_LEN];
split_message(message, part1, part2, part3, part4);
printf("Part 1: %s\n", part1);
printf("Part 2: %s\n", part2);
printf("Part 3: %s\n", part3);
printf("Part 4: %s\n", part4);
return 0;
}