Nespretni reg comp php. Man regcomp(3): POSIX funkcije regularnog izraza. POSIX izvješćivanje o pogreškama

#uključi
#uključi
int regcomp(regex_t *trudnica, const char *regularni izraz, intcflags);
int regexec(const regex_t *trudnica, const char *niz, veličina_tnmatch,
regmatch_tpmatch, inteflagovi);
veličina_t reggreška(intkod pogreške, const regex_t *trudnica, char *errbuf,
veličina_terrbuf_veličina);
void regfree(regex_t *trudnica);

OPIS

Prevođenje POSIX regularnih izraza

Funkcija regcomp() koristi se za prevođenje regularnog izraza u format koji je prikladan za naknadna pretraživanja regexec().

regcomp() prosljeđuje se pokazivač na područje pohrane predloška međuspremnika trudnica, pokazivač na niz koji završava nulom regularni izraz i zastave cflags, koristi se za određivanje tipa kompilacije.

Sva pretraživanja regularnih izraza moraju se obaviti korištenjem kompajliranog uzorka međuspremnika, dakle regexec() uvijek se mora pozvati s adresom predloška međuspremnika koji je inicijalizirala funkcija regcomp().

Značenje cflags može se sastojati od bitwise ili nula ili više od sljedećih vrijednosti:

REG_EXTENDED Koristite POSIX sintaksu proširenog regularnog izraza tijekom interpretacije regularni izraz. Ako ova oznaka nije omogućena, koristi se sintaksa jednostavnog regularnog izraza POSIX. REG_ICASE Zanemari velika i mala slova. Naknadne pretrage regexec() korištenje ovog uzorka međuspremnika neće biti osjetljivo na velika i mala slova. REG_NOSUB Ne prijavljujte položaj utakmica. Mogućnosti nmatch I pmatch Za regexec() se zanemaruju ako je dani predložak međuspremnika kompajliran s omogućenom ovom zastavom. REG_NEWLINE Operatori podudaranja s bilo kojim znakom ne odgovaraju znaku novog retka.

Popis znakova koji se ne podudaraju ( [^...] ) bez znaka novog retka nije isto što i novi red.

Operator usporedbe na temelju početka niza ( ^ ) odgovara praznom nizu odmah nakon novog retka bez obzira na sve eflagovi, zastavice izvršenja regexec(), sadrže REG_NOTBOL.

Operator usporedbe na kraju retka ($) odgovara praznom nizu do znaka na početku retka, bez obzira na sve eflagovi sadrži REG_NOTEOL.

Usporedba s POSIX regularnim izrazom

Funkcija regexec() koristi se za usporedbu niza s nultom završetkom s prethodno obrađenim uzorkom međuspremnika trudnica. Argumenti nmatch I pmatch koriste se za pružanje informacija o lokaciji bilo kojeg podudaranja. Značenje eflagovi može biti bitwise ILI jednu ili obje vrijednosti REG_NOTBOL I REG_NOTEOL. Ove vrijednosti određuju ponašanje procesa usporedbe kao što je opisano u nastavku. REG_NOTBOL Operator usporedbe na početku niza uvijek ne uspijeva (ali pogledajte gore opisanu oznaku kompilacije REG_NEWLINE). Ova se zastavica može koristiti kada regexec() prenose se odvojeni dijelovi niza, a početak takvog niza u ovom slučaju ne treba tumačiti kao početak novog retka. REG_NOTEOL Operator usporedbe na kraju retka uvijek ne uspije (ali pogledajte gore opisanu oznaku kompilacije REG_NEWLINE).

Pomaci bajtova

Ako REG_NOSUB nije postavljeno prilikom sastavljanja predloška međuspremnika, moguće je dobiti informacije o poziciji podudaranja. Značenje pmatch mora biti definiran da ima najmanje nmatch elementi. Pune se regexec() adrese inline podudaranja. Pomaci podizraza koji počinju s ja- otvorena zagrada, pohranjeno u pmatch[i]. Adresa podudaranja cijelog regularnog izraza pohranjuje se u pmatch(imajte na umu da za vraćanje pomaka podudaranja N podizrazi, značenje nmatch ne smije biti ništa manje N+1). Svi neiskorišteni elementi strukture sadržavat će vrijednost -1.

Struktura regmatch_t, što je vrsta pmatch, definirano u :

Typedef struct (regoff_t rm_so; regoff_t rm_eo;) regmatch_t;

Svaki element rm_so, koji nije jednak -1, označava početni pomak sljedećeg podudaranja najvećeg podniza unutar danog niza. Relativni element rm_eo označava pomak kraja podudaranja, što je prvi znak nakon podudaranog teksta.

POSIX izvješćivanje o pogreškama

Funkcija regerror koristi se za pretvaranje kodova grešaka koji se mogu primiti od regcomp() I regexec(), u retke poruka o pogrešci.

U regerror preneseno: kod greške kod pogreške, uzorak međuspremnika trudnica, pokazivač na međuspremnik niza znakova errbuf i veličina međuspremnika reda errbuf_veličina. Funkcija vraća veličinu errbuf, koji je potreban za pohranjivanje poruke o pogrešci kao niza koji završava nulom. Ako errbuf, I errbuf_veličina tada nisu jednaki nuli errbuf prvi ispunjen errbuf_size - 1 znakova poruke o pogrešci i završava nultim bajtom ("\0").

Oslobađanje međuspremnika POSIX predloška

Funkcija regfree() oslobađa memoriju dodijeljenu predlošku međuspremnika trudnica tijekom procesa kompilacije pomoću regcomp().

POVRATNA VRIJEDNOST

Funkcija regcomp() vraća nulu pri uspješnoj kompilaciji ili kod pogreške u suprotnom.

Funkcija regexec() vraća nulu pri podudaranju ili REG_NOMATCH, ako nije bilo utakmica.

POGREŠKE

Funkcija regcomp() može vratiti sljedeće pogreške: REG_BADBR Neispravna uporaba operatora povratne veze. REG_BADPAT Neispravna upotreba operatora predloška, ​​kao što su operatori grupe ili popisa. REG_BADRPT Neispravna upotreba operatora za ponavljanje, kao što je upotreba "*" kao prvog znaka. REG_EBRACE Nesparene zagrade u intervalnim operatorima. REG_EBRACK Nesparene uglate zagrade u iskazima popisa. REG_ECOLLATE Nevažeći element sortiranja. REG_ECTYPE Nepoznato ime klase znakova. REG_EEND Potencijalna greška. Nije definirano u POSIX-u.2. REG_EESCAPE Obrnuta kosa crta na kraju. REG_EPAREN Neuparene zagrade u operatorima grupiranja. REG_ERANGE Neispravna uporaba operatora područja: na primjer, kraj područja pojavljuje se prije njegova početka. REG_ESIZE Prevedeni regularni izraz zahtijeva uzorak međuspremnika veći od 64 KB. Ovo nije definirano u POSIX.2. REG_ESPACE Rutinama regularnog izraza ponestalo je memorije. REG_ESUBREG Nevažeća povratna referenca na podizraz.

> int regcomp(regex_t * trudnica, const char *regularni izraz, int cflags); int regexec(const regex_t *trudnica, const char *niz, veličina_t nmatch, regmatch_t pmatch, int eflagovi); veličina_t reggreška(int kod pogreške, const regex_t *trudnica, char *errbuf, veličina_t errbuf_veličina); void regfree(regex_t *trudnica);

Opis

POSIX regex kompilacija regcomp() koristi se za prevođenje regularnog izraza u oblik koji je prikladan za naknadno regexec()pretrage.

regcomp() se isporučuje sa trudnica, pokazivač na područje pohrane međuspremnika uzorka; regularni izraz, pokazivač na niz koji završava nulom i cflags, zastavice koje se koriste za određivanje tipa kompilacije.

Stoga se sva pretraga regularnih izraza mora obaviti putem kompajliranog međuspremnika uzoraka regexec() mora uvijek biti opremljen adresom a regcomp() inicijalizirani međuspremnik uzorka.

cflags može biti bit- ili jednog ili više od sljedećeg: REG_EXTENDED Koristiti POSIX Proširena sintaksa regularnog izraza pri tumačenju regularni izraz. Ako nije postavljeno POSIX Koristi se osnovna sintaksa regularnog izraza. REG_ICASE Nemojte razlikovati velika i mala slova. Naknadno regexec() pretraživanja pomoću ovog međuspremnika uzorka neće razlikovati velika i mala slova. REG_NOSUB Ne prijavljujte položaj utakmica. The nmatch i pmatch argumente za regexec() se zanemaruju ako je isporučeni međuspremnik uzorka kompajliran s ovim skupom zastavica. REG_NEWLINE Operatori podudaranja bilo kojeg znaka ne odgovaraju novom retku.

Popis koji se ne podudara ( [^...] ) koji ne sadrži novi red ne odgovara novom retku.

Operator podudaranja početka retka ( ^ ) odgovara praznom nizu odmah nakon novog retka, bez obzira na to je li eflagovi, zastavice izvršenja regexec(), sadrži REG_NOTBOL.

Operator podudaranja na kraju retka ( $ ) odgovara praznom nizu neposredno prije novog retka, bez obzira da li eflagovi sadrži REG_NOTEOL.

podudaranje POSIX regularnog izraza regexec() koristi se za podudaranje niza s nultim završetkom u odnosu na predkompilirani međuspremnik uzorka, trudnica. nmatch i pmatch koriste se za pružanje informacija o lokaciji bilo kojeg podudaranja. eflagovi može biti bit- ili jednog ili oba REG_NOTBOL i REG_NOTEOL koji uzrokuju promjene u ponašanju usklađivanja opisanih u nastavku. REG_NOTBOL Operator podudaranja početka retka uvijek se ne podudara (ali pogledajte oznaku kompilacije REG_NEWLINE gore) Ova se zastavica može koristiti kada se prosljeđuju različiti dijelovi niza regexec() i početak niza ne treba tumačiti kao početak retka. REG_NOTEOL Operator match-end-of-line uvijek se ne podudara (ali pogledajte oznaku kompilacije REG_NEWLINE iznad)

Pomaci bajtova Osim ako REG_NOSUB postavljen za kompilaciju međuspremnika uzorka, moguće je dobiti informacije o adresiranju podudaranja. pmatch mora biti dimenzioniran da ima najmanje nmatch elementi. Ispunjava ih regexec() s adresama podudaranja podniza. Pomaci podizraza koji počinju na ja otvorene zagrade su pohranjene u pmatch[i]. Adrese podudaranja cijelog regularnog izraza pohranjene su u pmatch. (Imajte na umu da za vraćanje pomaka N podudaranja podizražaja, nmatch mora biti najmanje N+1.) Svi neiskorišteni elementi strukture sadržavat će vrijednost -1.

The regmatch_t struktura koja je vrsta pmatch definiran je u .

Typedef struct (regoff_t rm_so; regoff_t rm_eo;) regmatch_t; Svaki rm_so element koji nije -1 označava početni pomak sljedećeg najvećeg podudaranja podniza unutar niza. Rođak rm_eo označava krajnji pomak podudaranja, što je pomak prvog znaka nakon odgovarajućeg teksta.

POSIX prijava grešaka regerror() koristi se za pretvaranje kodova grešaka koje mogu vratiti oba regcomp() i regexec() u nizove poruka o pogrešci.

regerror() je proslijeđen kod greške, kod pogreške, međuspremnik uzorka, trudnica, pokazivač na međuspremnik niza znakova, errbuf i veličina međuspremnika niza, errbuf_veličina. Vraća veličinu errbuf potrebno sadržavati niz poruke o pogrešci s nultim završetkom. Ako oboje errbuf i errbuf_veličina nisu nula, errbuf popunjava se s prvim errbuf_size - 1 znakove poruke o pogrešci i završni nulti bajt ("\0").

POSIX uzorak oslobađanje međuspremnika Opskrba regfree() s unaprijed kompajliranim međuspremnikom uzorka, trudnica oslobodit će memoriju dodijeljenu međuspremniku uzorka procesom kompajliranja, regcomp().

Povratna vrijednost

regcomp() vraća nulu za uspješnu kompilaciju ili šifru pogreške za neuspjeh.

regexec() vraća nulu za uspješno podudaranje ili REG_NOMATCH za neuspjeh.

Greške

Sljedeće pogreške može vratiti regcomp(): REG_BADBR Nevažeća upotreba operatora povratne reference. REG_BADPAT Nevažeća upotreba operatora uzorka kao što su grupa ili lista. REG_BADRPT Nevažeća upotreba operatora za ponavljanje kao što je upotreba "*" kao prvog znaka. REG_EBRACE Intervalni operatori bez podudaranja. REG_EBRACK Neusklađeni operatori popisa zagrada. REG_ECOLLATE Nevažeći element razvrstavanja. REG_ECTYPE Nepoznato ime klase znakova. REG_EEND Nespecifična pogreška. Ovo nije definirano POSIX-om.2. REG_EESCAPE Obrnuta kosa crta na kraju. REG_EPAREN Operatori grupe zagrada bez podudaranja. REG_ERANGE Nevažeća upotreba operatora raspona, npr. krajnja točka raspona nalazi se prije početne točke. REG_ESIZE Prevedeni regularni izraz zahtijeva međuspremnik uzorka veći od 64 Kb. Ovo nije definirano POSIX-om.2. REG_ESPACE Rutinama regularnih izraza ponestalo je memorije. REG_ESUBREG Nevažeća povratna referenca na podizraz.

> int regcomp(regex_t *trudnica, const char *regularni izraz, intcflags); int regexec(const regex_t *trudnica, const char *niz, veličina_tnmatch, regmatch_tpmatch, inteflagovi); veličina_t reggreška(intkod pogreške, const regex_t *trudnica, char *errbuf, veličina_terrbuf_veličina); void regfree(regex_t *trudnica);

OPIS

Prevođenje POSIX regularnih izraza

Funkcija regcomp() koristi se za prevođenje regularnog izraza u format koji je prikladan za naknadna pretraživanja regexec().

regcomp() prosljeđuje se pokazivač na područje pohrane predloška međuspremnika trudnica, pokazivač na niz koji završava nulom regularni izraz i zastave cflags, koristi se za određivanje tipa kompilacije.

Sva pretraživanja regularnih izraza moraju se obaviti korištenjem kompajliranog uzorka međuspremnika, dakle regexec() uvijek se mora pozvati s adresom predloška međuspremnika koji je inicijalizirala funkcija regcomp().

Značenje cflags može se sastojati od bitwise ili nula ili više od sljedećih vrijednosti: REG_EXTENDED Koristite POSIX sintaksu proširenog regularnog izraza tijekom interpretacije regularni izraz. Ako ova oznaka nije omogućena, koristi se sintaksa jednostavnog regularnog izraza POSIX. REG_ICASE Zanemari velika i mala slova. Naknadne pretrage regexec() korištenje ovog uzorka međuspremnika neće biti osjetljivo na velika i mala slova. REG_NOSUB Ne prijavljujte položaj utakmica. Mogućnosti nmatch I pmatch Za regexec() se zanemaruju ako je dani predložak međuspremnika kompajliran s omogućenom ovom zastavom. REG_NEWLINE Operatori podudaranja s bilo kojim znakom ne odgovaraju znaku novog retka. Popis znakova koji se ne podudaraju ( [^...] ) bez znaka novog retka ne odgovara novom retku. Operator usporedbe na temelju početka niza ( ^ ) odgovara praznom nizu odmah nakon novog retka, bez obzira na sve eflagovi, zastavice izvršenja regexec(), sadrže REG_NOTBOL. Operator usporedbe na kraju retka ($) odgovara praznom nizu do početka retka, bez obzira na sve eflagovi sadrži REG_NOTEOL.

Usporedba s POSIX regularnim izrazom

Funkcija regexec() koristi se za usporedbu niza s nultom završetkom s prethodno obrađenim uzorkom međuspremnika trudnica. Argumenti nmatch I pmatch koriste se za pružanje informacija o lokaciji bilo kojeg podudaranja. Značenje eflagovi može biti bitwise ILI jednu ili obje vrijednosti REG_NOTBOL I REG_NOTEOL. Ove vrijednosti određuju ponašanje procesa usporedbe kao što je opisano u nastavku. REG_NOTBOL Operator usporedbe na početku niza uvijek ne uspijeva (ali pogledajte gore opisanu oznaku kompilacije REG_NEWLINE). Ova se zastavica može koristiti kada regexec() prenose se odvojeni dijelovi niza, a početak takvog niza u ovom slučaju ne treba tumačiti kao početak novog retka. REG_NOTEOL Operator usporedbe na kraju retka uvijek ne uspije (ali pogledajte gore opisanu oznaku kompilacije REG_NEWLINE).

Pomaci bajtova

Ako REG_NOSUB nije postavljeno prilikom sastavljanja predloška međuspremnika, moguće je dobiti informacije o poziciji podudaranja. Značenje pmatch mora biti definiran da ima najmanje nmatch elementi. Pune se regexec() adrese inline podudaranja. Pomaci podizraza koji počinju s ja th otvoreni zagrada, pohranjeno u pmatch[i]. Adresa podudaranja cijelog regularnog izraza pohranjuje se u pmatch(imajte na umu da za vraćanje pomaka podudaranja N podizrazi, značenje nmatch ne smije biti ništa manje N+1). Svi neiskorišteni elementi strukture sadržavat će vrijednost -1.

Struktura regmatch_t, što je vrsta pmatch, definirano u :

typedef struktura(
regoff_t rm_so;
regoff_t rm_eo;) regmatch_t;

Svaki element rm_so, koji nije jednak -1, označava početni pomak sljedećeg najvećeg podudaranja podniza unutar danog niza. Relativni element rm_eo označava pomak kraja podudaranja, što je prvi znak nakon podudaranog teksta.

POSIX izvješćivanje o pogreškama

Funkcija regerror koristi se za pretvaranje kodova grešaka koji se mogu primiti od regcomp() I regexec(), u redovima poruka o pogrešci.

U regerror preneseno: kod greške kod pogreške, uzorak međuspremnika trudnica,pokazivač na međuspremnik niza znakova errbuf i veličina međuspremnika reda errbuf_veličina. Funkcija vraća veličinu errbuf, koji je potreban za pohranjivanje poruke o pogrešci kao niza koji završava nulom. Ako errbuf, I errbuf_veličina tada nisu jednaki nuli errbuf prvi ispunjen errbuf_size - 1 simboli poruke o pogrešci i završava nultim bajtom (aq\0aq).

Oslobađanje međuspremnika POSIX predloška

Funkcija regfree() oslobađa memoriju dodijeljenu predlošku međuspremnika trudnica tijekom procesa kompilacije pomoću regcomp().

POVRATNA VRIJEDNOST

Funkcija regcomp() vraća nulu pri uspješnoj kompilaciji ili kod pogreške u suprotnom.

Funkcija regexec() vraća nulu pri podudaranju ili REG_NOMATCH, ako nije bilo utakmica.

POGREŠKE

Funkcija regcomp() može vratiti sljedeće pogreške: REG_BADBR Neispravna uporaba operatora povratne veze. REG_BADPAT Neispravna upotreba operatora predloška, ​​kao što su operatori grupe ili popisa. REG_BADRPT Neispravna upotreba operatora za ponavljanje, kao što je upotreba "*" kao prvog znaka. REG_EBRACE Nesparene zagrade u intervalnim operatorima. REG_EBRACK Nesparene uglate zagrade u iskazima popisa. REG_ECOLLATE Nevažeći element sortiranja. REG_ECTYPE Nepoznato ime klase znakova. REG_EEND Potencijalna greška. Nije definirano u POSIX-u.2. REG_EESCAPE Obrnuta kosa crta na kraju. REG_EPAREN Neuparene zagrade u operatorima grupiranja. REG_ERANGE Neispravna uporaba operatora područja: na primjer, kraj područja pojavljuje se prije njegova početka. REG_ESIZE Prevedeni regularni izraz zahtijeva uzorak međuspremnika veći od 64 KB. Ovo nije definirano u POSIX.2. REG_ESPACE Rutinama regularnog izraza ponestalo je memorije. REG_ESUBREG Nevažeća povratna referenca na podizraz. Sadržaj

npr

ereg -- uparena vrijednost regularnog izraza
Opis
int ereg (uzorak niza, niz znakova, niz);

Traži uparene vrijednosti niz u regularnom izrazu navedenom u uzorak .

Ako su uparene vrijednosti pronađene za podnizove u zagradama uzorak a funkcija je pozvana s trećim argumentom pravila, tada će uparene vrijednosti biti pohranjene u elementima pravila. $regs će sadržavati podniz koji počinje prvom lijevom zagradom; $regs će sadržavati podniz koji počinje s drugom zagradom, itd. $regs će sadržavati kopiju niz .

Pretraživanje je osjetljivo na velika i mala slova.

Funkcija vraća true ako je odgovarajuća vrijednost za uzorak pronađena u nizu ili false ako nisu pronađene odgovarajuće vrijednosti ili je došlo do pogreške.

Sljedeći kod izvlači datum u ISO formatu i ispisuje ga u formatu DD.MM.GGGG:

Primjer 1. ereg() primjer

If (ereg("((4))-((1,2))-((1,2))", $date, $regs)) ( echo "$regs.$regs.$regs"; ) else ( echo "Nevažeći format datuma: $datum"; )

ereg_zamijeniti

ereg_replace -- zamjenjuje regularni izraz
Opis
string ereg_replace(string uzorak, string zamjena, string string);

Ova funkcija skenira niz na uparene vrijednosti k uzorak, zatim zamjenjuje pronađeni tekst s zamjena .

Ako uzorak sadrži podnizove u zagradama, dakle zamjena može sadržavati podnizove poput \\ broj, koji će biti zamijenjen tekstom koji odgovara numeričkom podnizu u zagradama; \\0 će obraditi cijeli sadržaj niza. Može se koristiti do 9 podnizova. Zagrade se mogu grupirati, u kojem slučaju se broje prema početnim zagradama. Na primjer, sljedeći kod će tri puta ispisati "Ovo je bio test":

Primjer 1. ereg_replace()

$string = "Ovo je test"; echo ereg_replace(" je", "bio", $string); echo ereg_replace("()je", "\\1je", $string); echo ereg_replace("(()je)", "\\2je", $string);

Vidi također , , i .

eregi

eregi -- traženje uparenih vrijednosti u regularnim izrazima bez obzira na velika i mala slova
Opis
int eregi (uzorak niza, niz znakova, niz);

eregi_zamijeniti

eregi_replace -- zamjena regularnog izraza koja ne razlikuje velika i mala slova
Opis
string eregi_replace(string uzorak, string zamjena, string string);

podjela

split -- dijeli niz u niz pomoću regularnog izraza
Opis
dijeljenje niza (string uzorak, string string, int);

Vraća niz nizova, od kojih je svaki podniz niza, formiran lomljenjem tog niza na dijelove odvojene jedan od drugog uzorak. Ako dođe do pogreške, funkcija će vratiti false.

Da biste dobili prvih 5 polja iz retka u /etc/passwd:

Bit će izdano.

Ova značajka može se koristiti za izvođenje usporedbi bez obzira na velika i mala slova u proizvodima koji podržavaju samo izraze koji razlikuju velika i mala slova.