Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:c:regularis_kifejezesek

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

oktatas:programozas:c:regularis_kifejezesek [2017/10/02 20:29]
oktatas:programozas:c:regularis_kifejezesek [2019/08/21 17:49] (aktuális)
admin létrehozva
Sor 1: Sor 1:
 +[[:​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:​
 +<code c>
 +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 *); 
 +</​code>​
 +
 +==== 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 =====
 +
 +<code c main.c>
 +#include <​sys/​types.h>​
 +#include <​regex.h>​
 +  ​
 +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; 
 +}
 +</​code>​
 +  ​
 +===== 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.