Posix正前pression非贪婪 [英] Posix regular expression non-greedy
问题描述
有没有使用非正规贪婪前pression用C一样可以在Perl中使用的方法吗?
我试了几件事情,但它实际上没有工作。
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.
我目前使用此正则表达式匹配的IP地址和相应的HTTP请求,但尽管我使用的是贪婪的*?:
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
$ ./regtest
127.0.0.1 GET /test.php HTTP / 1.1404 525 - Mozilla的/ 5.0(Windows NT的HTTP / 1.1
127.0.0.1 GET /test.php HTTP/1.1" 404 525 "-" "Mozilla/5.0 (Windows NT HTTP/1.1
推荐答案
没有,也有POSIX正前pressions没有非贪婪量词。但它提供的perl-像普通的前pressions对于C库: http://www.pcre.org /
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/
这篇关于Posix正前pression非贪婪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!