मैं सी का उपयोग करने में अनुभवहीन हूं, और मुझे मैच प्राप्त करने के लिए पीसीआरई का उपयोग करने की आवश्यकता है।
यहाँ मेरी स्रोत कोड का एक नमूना है:मैं सभी मिलान समूहों को प्राप्त करने के लिए पीसीआरई का उपयोग कैसे कर सकता हूं?
int test2()
{
const char *error;
int erroffset;
pcre *re;
int rc;
int i;
int ovector[OVECCOUNT];
char *regex = "From:([^@]+)@([^\r]+)";
char str[] = "From:[email protected]\r\n"\
"From:[email protected]\r\n"\
"From:[email protected]\r\n";
re = pcre_compile (
regex, /* the pattern */
0, /* default options */
&error, /* for error message */
&erroffset, /* for error offset */
0); /* use default character tables */
if (!re) {
printf("pcre_compile failed (offset: %d), %s\n", erroffset, error);
return -1;
}
rc = pcre_exec (
re, /* the compiled pattern */
0, /* no extra data - pattern was not studied */
str, /* the string to match */
strlen(str), /* the length of the string */
0, /* start at offset 0 in the subject */
0, /* default options */
ovector, /* output vector for substring information */
OVECCOUNT); /* number of elements in the output vector */
if (rc < 0) {
switch (rc) {
case PCRE_ERROR_NOMATCH:
printf("String didn't match");
break;
default:
printf("Error while matching: %d\n", rc);
break;
}
free(re);
return -1;
}
for (i = 0; i < rc; i++) {
printf("%2d: %.*s\n", i, ovector[2*i+1] - ovector[2*i], str + ovector[2*i]);
}
}
इस डेमो में, उत्पादन केवल है:
0: From:[email protected]
1: regular.expressions
2: example.com
मैं उत्पादन करना चाहते हैं के सभी मैचों; मैं उसे कैसे कर सकता हूँ?
नियमित अभिव्यक्ति का उपयोग न करें लेकिन असली पार्सर का उपयोग न करें। मेल प्रोटोकॉल केवल सादे मेलबॉक्स पते से अधिक की अनुमति देता है। – Gumbo
यह पिक्चर के लिए एक डेमो है, मैं सिर्फ यह जानना चाहता हूं कि मिलान समूहों में पिक का उपयोग कैसे करें। आपकी टिप्पणी के लिए धन्यवाद। – tbmvp
आपको इस पोस्ट का संदर्भ लेना चाहिए: http://stackoverflow.com/questions/7785557/pcre-match-all-groups-in-c – soulmachine