क्या सी में गैर-लालची नियमित अभिव्यक्ति का उपयोग करने का कोई तरीका है जैसे कि पर्ल में उपयोग किया जा सकता है? मैंने कई चीजों की कोशिश की, लेकिन यह वास्तव में काम नहीं कर रहा है।पॉज़िक्स नियमित अभिव्यक्ति गैर-लालची
मैं इस समय इस regex कि एक आईपी पता है और इसी HTTP अनुरोध से मेल खाता है का उपयोग कर रहा है, लेकिन यह लालची हालांकि मैं उपयोग कर रहा हूँ * ?:
([0-9]{1,3}(\\.[0-9]{1,3}){3})(.*?)HTTP/1.1
इस उदाहरण में, यह हमेशा से मेल खाता है पूरी स्ट्रिंग:
#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 प्राप्त /test.php HTTP/1.1 "404 525" - "" Mozilla/5.0 (Windows NT HTTP/1.1
में इस मैक्रो आप सवाल का इनपुट स्ट्रिंग को जोड़ सकते हैं नहीं है। [यह मेरे लिए काम करता प्रतीत होता है।] (Http://regexr.com?37cvn) – OGHaza
मुझे नहीं पता कि 'सी' इसलिए सलाह नहीं दे सकता है, लेकिन समस्या आपके कोड में है [आपके regex नहीं] (http: //regexr.com?37cvt)। यदि आप अपनी इनपुट स्ट्रिंग के अंत में और जोड़ते हैं तो शायद यह स्पष्ट हो जाएगा कि यह दूसरे 'HTTP/1.1' से मेल नहीं खाता बल्कि पूरे इनपुट स्ट्रिंग को वापस कर रहा है। – OGHaza
आप एक अधिक सटीक आईपी मिलान का उपयोग कर सकते हैं। यह उत्तर देखें: http://stackoverflow.com/a/106223/363573 – Stephan