-
-
Save ianmackinnon/3294587 to your computer and use it in GitHub Desktop.
# gcc -Wall -o match match.c && ./match | |
# | |
#include <stdio.h> | |
#include <string.h> | |
#include <regex.h> | |
int main () | |
{ | |
char * source = "___ abc123def ___ ghi456 ___"; | |
char * regexString = "[a-z]*([0-9]+)([a-z]*)"; | |
size_t maxMatches = 2; | |
size_t maxGroups = 3; | |
regex_t regexCompiled; | |
regmatch_t groupArray[maxGroups]; | |
unsigned int m; | |
char * cursor; | |
if (regcomp(®exCompiled, regexString, REG_EXTENDED)) | |
{ | |
printf("Could not compile regular expression.\n"); | |
return 1; | |
}; | |
m = 0; | |
cursor = source; | |
for (m = 0; m < maxMatches; m ++) | |
{ | |
if (regexec(®exCompiled, cursor, maxGroups, groupArray, 0)) | |
break; // No more matches | |
unsigned int g = 0; | |
unsigned int offset = 0; | |
for (g = 0; g < maxGroups; g++) | |
{ | |
if (groupArray[g].rm_so == (size_t)-1) | |
break; // No more groups | |
if (g == 0) | |
offset = groupArray[g].rm_eo; | |
char cursorCopy[strlen(cursor) + 1]; | |
strcpy(cursorCopy, cursor); | |
cursorCopy[groupArray[g].rm_eo] = 0; | |
printf("Match %u, Group %u: [%2u-%2u]: %s\n", | |
m, g, groupArray[g].rm_so, groupArray[g].rm_eo, | |
cursorCopy + groupArray[g].rm_so); | |
} | |
cursor += offset; | |
} | |
regfree(®exCompiled); | |
return 0; | |
} |
Fucking finally. Someone posted multiple matches case.
Much needed code. Thank you a million times for this!
Great example, it's hard to find one that captures multiple matches. I had to write my own the other day and this would have helped. Here's my similar Gist in case it helps anyone else out.
This is extremely helpful for me. Thank you so much!
Why do you get the offset from the first group rather than the last?
Excellent example. Everything you need to use regex
Thank you!!! I Just need the example code
Thanks for the example.
Really a great example, just what I needed. Many thanks
i owe you my life for posting this. Thanks!
Great example, I forked this and created another one with comments to explain what is going on if anyone needs help uerstanding what is happening here.
great example ...