[[: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.