Ich beschäftige mich grad mit der libPCRE.a
Ich schreibe in C, und hab dazu folgenden Code:
1 | int* get_token(char* string) {
|
2 | re = pcre_compile("(([0-9]+){1}\\s{1}([\\+|\\-|\\/|\\*]\\s{0,1})+",0,&error,&offset,NULL);
|
3 | sd = pcre_study(re,0,&error);
|
4 | rc = pcre_exec(re,sd,string,strlen(string),0,0,ovector,30);
|
5 | return &rc;
|
6 | }
|
7 |
|
8 | int main() {
|
9 | int* token;
|
10 | printf("Hello World!\r\n");
|
11 | printf("Exec RegExp!\r\n");
|
12 | char ausdruck[25];
|
13 | gets(ausdruck);
|
14 | printf("Your Input: %s\r\n",ausdruck);
|
15 | token = get_token(ausdruck);
|
16 | printf("%d: %s\r\n",offset,error);
|
17 | int i = 0;
|
18 | for(i=0;i<sizeof(ovector) / sizeof(int);i+=2) {
|
19 | printf("%d - %d\t",ovector[i],ovector[i+1]);
|
20 | }
|
21 | printf("\r\n");
|
22 | exit(0);
|
23 | }
|
Jetzt bekomm ich aus der obersten Untergruppe immer nur an der letzten
Stelle nen Match, z.B. bei der Eingabe "3 + 3 + 3 "
Bekomme ich die Ausgabe: 0-8,4-8,4-5,6-7
Das ist die letzte Untergruppe, ich hätte jetzt eigentlich erwartet das
er mir die erste Untergruppe ausspruckt beim ersten Aufruf, weil sie ja
zuerst im String erscheint... Hab ich einen Fehler gemacht, er sollte
eigentlich von vorn nach hinten arbeiten, also sprich so:
0-8,0-4,0-1,2-3... und beim zweiten aufruf halt obige ausgabe dann.
Oder eigentlich die ganzen Subpattern mit einen aufruf, halt so:
0-8,0-4,0-1,2-3,4-8,4-5,6-7