Posix regular expression non-greedy

c, non-greedy, posix, regex

Solution

No, there are no non-greedy quantifiers in POSIX regular expressions. But there is a library that provides perl-like regular expressions for C: http://www.pcre.org/

Problem

Is there a way to use a non-greedy regular expression in C like one can use in Perl? I tried several things, but it's actually not working. I'm currently using this regex that matches an IP address and the corresponding HTTP request, but it's greedy although I'm using the *?: `([0-9]{1,3}(\\.[0-9]{1,3}){3})(.*?)HTTP/1.1` In this example, it always matches the whole string: ``` #include <regex.h> #include <stdio.h> int main() { int a, i; regex_t re; regmatch_t pm; char *mpages = "TEST 127.0.0.1 GET /test.php HTTP/1.1\" 404 525 \"-\" \"Mozilla/5.0 (Windows NT HTTP/1.1 TEST"; a = regcomp(&re, "([0-9]{1,3}(\\.[0-9]{1,3}){3})(.*?)HTTP/1.1", REG_EXTENDED); if(a!=0) printf(" -> Error: Invalid Regex"); a = regexec(&re, &mpages[0], 1, &pm, REG_EXTENDED); if(a==0) { for(i = pm.rm_so; i < pm.rm_eo; i++) printf("%c", mpages[i]); printf("\n"); } return 0; } ``` $ ./regtest 127.0.0.1 GET /test.php HTTP/1.1" 404 525 "-" "Mozilla/5.0 (Windows NT HTTP/1.1

Original source

Related problems