[[:oktatas:programozás:c|< C]]
====== A regex.h használata ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2011
* Licenc: GNU Free Documentation License 1.3
* Web: http://szit.hu
===== Használt függvények =====
Négy függvényt használhatunk:
int regcomp(regex_t *, const char *, int);
int regexec(const regex_t *, const char *, size_t, regmatch_t[], int);
size_t regerror(int, const regex_t *, char *, size_t);
void regfree(regex_t *);
==== Regcomp ====
Ez a függvény előkészíti a regexec hívást.
Meg kell adjuk a paraméterként a mintát és egyéb kapcsolókat.
A kapcsolók a következők lehetnek:
REG_EXTENDED = Kiterjesztett szabályos kifejezések használata
REG_ICASE = Kis- és nagybetű nem különbözik
REG_NOSUB = Jelentés csak a sikerről/sikertelenségről a regexec() esetén
REG_NEWLINE = Az új sor után is olvas
==== Regexec ====
Összehasonlítja a megadott szöveget a megadott mintával.
Ha a minta egyezik 0 eredményt kapunk, ha nem akkor REG_NOMATCH állandóval tér vissza.
REG_ENOSYS értékkel tér vissza ha a függvény nem támogatott. A következő jelzők használhatók:
REG_NOTBOL = ^ nem szöveg vége speciális karaktere helyett
REG_NOTEOL = $ nem szöveg vége speciális karakter helyett
==== Regerror ====
Értelmezi a regexec és a regcomp visszatérő hibakódokat és egy szöveget add helyettük.
Sikeres végrehajtás esetén megadja a visszaadott szöveg hosszát, ellenkező esetben 0-val.
==== Regfree ====
A regex számára lefoglalt memóriát felszabadítja.
===== Példa =====
#include
#include
int match(const char *szoveg, char *minta)
{
int status;
regex_t re;
if(regcomp(&re, minta, REG_EXTENDED|REG_NOSUB) != 0)
return 0;
status = regexec(&re, szoveg, (size_t)0, NULL, 0);
regfree(&re);
if(status != 0)
return 0;
return 1;
}
===== Minta megadása =====
char *minta = "([0-9]{1,3}\\.){3}[0-9]{1,3}";
Számok megadása szögletes zárójellel. Egy tartományt határozunk meg:
[0-9]
0 és 9 között bármely számjegy lehet. Ha csak ennyit adunk meg, az illeszkedéshez elég a karaktersorozatban egyetlen számjegy
ami bárhol lehet.
Ha a számnak a sor elején kell lennie:
^[0-9]
Ha a számnak a sor végén kell lennie:
[0-9]$
Ha a sor eleji és a sor végi illeszkedést is jelzem:
^[0-9]$
Akkor csak egyetlen egy számjegyű számra fog illeszkedni.
Kapcsos zárójellel megadhatjuk hány darabot várunk az előtte megadott mintából.
^[0-9]{3}$
A példában három számjegyet várunk.
Három "a" betűre illeszkedés például:
a{3}
Escape szekvenciák megadása a kettő darab visszaperjellel történik.
\\.
Például a pont megadása.
Pont működik Escape szekvencia nélkül is.