Schrift
[thread]1103[/thread]

Reg Exp in C: Reguläre Ausdrücke in C (Seite 2)



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
esskar
 2004-02-20 16:35
#10911 #10911
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bzw.
es gibt strstr
strchr und so...
dukerw
 2004-02-20 17:34
#10912 #10912
User since
2003-08-20
17 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,20.Feb..2004, 15:34]
Code: (dl )
int regexec(const regex_t *, const char *, size_t, regmatch_t [], int);


ist wohl das, was du suchst![/quote]
komme nicht dahinter wie ich auf die gefunden stringteile zugreife.
regmatch_t ist ein struct mit anfang und ende der fundstelle
ungerfähr so
Code: (dl )
1
2
3
4
typedef struct {
regoff_t rm_so; // start of match
regoff_t rm_eo; // end of match
} regmatch_t;

ist dann folgende deklaration ein array von diesen structs?
Code: (dl )
regmatch_t rx_match[100];


und wie komme ich über rm_so und rm_eo an die stelle im string? ich mein hier würde sich dann vielleicht strstr() oder strchr() lohnen.
Thx, der Duke.
esskar
 2004-02-20 17:47
#10913 #10913
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wenn text das char* ist, dass du durchsuchst

Code: (dl )
1
2
char* found[256+1] = {0};
memcpy(found, &text[rx_match[0].rm_so], &text[rx_match[0].rm_so] - &text[rx_match[0].rm_eo]);


nur geraten!
dukerw
 2004-02-20 18:36
#10914 #10914
User since
2003-08-20
17 Artikel
BenutzerIn
[default_avatar]
mein programm sieht inzwischen so aus, spuckt aber immer nur aus, dass der ausdruck (str) nicht gematched werden konnte.
kennt regex.h keine wildcards?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <regex.h>

#define BUFSIZE 1000
#define NMATCH 100

int main(void) {
char buf[BUFSIZE];
char found[BUFSIZE];

regex_t regexp;
regmatch_t rx_match[NMATCH];

char *str = "[0-9]+";

if (regcomp(&regexp, str, 0)!=0) {
return 1;
}

for(;;) {
printf("> "); fflush(stdout);
if ((fgets(buf, BUFSIZE, stdin))==0)
return 0;

if ((regexec(&regexp, buf, NMATCH, rx_match, 0))==0) {
printf("Match!!!\n");
memset(found,'0',BUFSIZE*sizeof(char));
memcpy(found, &buf[rx_match[0].rm_so], &buf[rx_match[0].rm_so] - &buf[rx_match[0].rm_eo]);
printf("gefunden: %s\n",found);
}
else
printf("Input doesn't match.\n");
}
}
Thx, der Duke.
esskar
 2004-02-20 18:56
#10915 #10915
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wie wär es mit

Code: (dl )
regexec(&regexp, buf, strlen(buf), rx_match, NMATCH);
lichtkind
 2004-03-25 10:11
#10916 #10916
User since
2004-03-22
5701 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
pcre\n\n

<!--EDIT|lichtkind|1080202440-->
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
havi
 2004-03-25 11:07
#10917 #10917
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Da lohnt sich wohl ein Umstieg auf C#.

Dort gibt es eine RegEx-Klasse.

Gruss
esskar
 2004-03-25 11:39
#10918 #10918
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=havi,25.03.2004, 10:07]Da lohnt sich wohl ein Umstieg auf C#.

Dort gibt es eine RegEx-Klasse.

Gruss[/quote]
dafür allein eigentlich nicht...

ich z.b. nur in perl viel mit strings zu tun...
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2004-02-20 15:58.