Is there a way to use an unwanted regular expression in C that can be used in Perl? I tried a few things, but actually it does not work.
I am currently using this regex that matches the IP address and the corresponding HTTP request, but it is greedy, although I use * ?:
([0-9]{1,3}(\\.[0-9]{1,3}){3})(.*?)HTTP/1.1
In this example, it always matches the entire line:
#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
c regex posix non-greedy
user2212190
source share