Regulære udtryk

Tags:    c++

<< < 12 > >>
Okay. Jeg ved, der er nogen, der kan finde ud af det, men jeg kan ikke selv, og det er der mange andre, der heller ikke kan. Hvordan kan man benytte det i C(++)?

Hilsen Thomas.

Ps. Lad være med at give et link, jeg kan godt selv finde ud af at søge på Google, og jeg har gjort det. En udførlig forklaring vil være langt mere velkommen. Og til Bertel: Jeg kan ikke finde ud af dit wGrep :-(



11 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Der er ikke nogen standard måde at bruge regulære udtryk i C eller C++.

wgrep er imho en af de simplere måder at gøre det på, den er dog ikke ret avanceret.

Du opretter et reg_exp_class objecjt:
reg_exp_class RegExp;

Derpå kalder du compiler for at fortælle hvad du vil søge på:
RegExp.compile("[:;]*");
compile returnerer true hvis den kunne kompilere udtrykket, false hvis den ikke kunne, du kan kalde get_last_error for at finde ud af hvad der gik galt.

Derpå kalder du find for hver streng som du vil søge:
const char *p = RegExp.find("some;string");
p vil så blive sat til at pege på den første forekomst af det du vil søge på i strengen, eller 0/NULL hvis ikke den fandt noget.
Hvis du vil kende længden på det du vil søge efter:
int Len;
const char *p = RegExp.find("some;string", &Len);

Så vil Len fortælle hvor mange tegn der matchede.

boost: http://boost.org/ har et hav af meget avancerede reg-exp klasser.



Det forstår jeg slet ikke.

Kan du lave et eksempel, hvor den søger efter "hej" i variablen "tekst"?



Et komplet eksempel:

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 17.06.2007 00:55 af Bruger #4996
Har jeg forstået det rigtigt, at compile sætter strengen, der søges efter, og find sætter strengen, der søges i?



Ja.




Mange tak :)



Hmm... Jeg får 5 fejlmeddelelser, alle i regexp.h på linie 12 (4 fejl) og 13 (1 fejl). Således lyder fejlene:
Fold kodeboks ind/udKode 


Edit: Når jeg smidder kommentarer rundt om linie 12 og 13, og inkluderer .cpp filen (ikke .h), så virker det. Altså ser 12 og 13 sådan ud:
Fold kodeboks ind/udKode 

Men holder det i længden? Altså FALSE og TRUE er jo BOOL's i forvejen, men måske der er en dybere mening med det?



Indlæg senest redigeret d. 18.06.2007 13:33 af Bruger #8985

Skal du søge på en streng midt i en tekst, hvor der p.t. ses bort fra linieskift, så kan dette gøres med et udtryk, der kan se ud a la følgende: ".*searchText.*" Du skal være opmærksom på at det er forskelligt hvordan syntaksen er og hvordan linieskift håndteres alt afhængig af din parser.

Jeg kan anbefale bogen:

Mastering Regular Expression
By Jeffery E. F. Friedl

Hvis du vil have noget af matematik bag regulæreudtryk, så skal du have fat i en lidt mere teori-tung bog som fx

Introduktion to Languages and the threory of Computation
By John Martin

Hth




Dem vil jeg helt klart kigge på. I min senest erhvervede bog (Programming Windows, Fifth Edition) står der nemlig intet om RegExp.



Hmm... Jeg får 5 fejlmeddelelser, alle i regexp.h på linie 12 (4 fejl) og 13 (1 fejl). Således lyder fejlene:
Fold kodeboks ind/udKode 


Edit: Når jeg smidder kommentarer rundt om linie 12 og 13, og inkluderer .cpp filen (ikke .h), så virker det. Altså ser 12 og 13 sådan ud:
Fold kodeboks ind/udKode 

Men holder det i længden? Altså FALSE og TRUE er jo BOOL's i forvejen, men måske der er en dybere mening med det?


Det lader til jeg skal have koden opdateret til at bruge bool og true og false i stedet for den hjemmelavede BOOL.
Det bør være sikkert at fjerne BOOL, specielt hvis du inkluderer windows.h



<< < 12 > >>
t