Vulgaire reg comp php. Man regcomp(3): POSIX reguliere expressiefuncties. Vergelijking met reguliere expressie van POSIX

Ten eerste zullen we de registratiepagina verbeteren door de mogelijkheid toe te voegen om een ​​avatar te uploaden. De bronafbeelding moet de indeling jpg, gif of png hebben. Het mag ook niet groter zijn dan 2 MB. Maak je geen zorgen, nadat het door het script is gecomprimeerd, zal de avatargrootte ongeveer 3 kb en het jpg-formaat zijn. Open de pagina reg.php en voeg deze toe in de tag < formulier> lijn enctype=”multipart/form-data”, zoals in het voorbeeld:


Registratie










Laten we nu sparen reg.php

2. Vervolgens moet u een ander veld in de tabel maken gebruikers. Laten we naar gaan phpmyadmin, selecteer de gewenste database en tabel.


We stellen alle waarden in zoals in de figuur:

Het pad naar de avatar wordt in dit veld vastgelegd en in een aparte map opgeslagen, laten we deze “avatars” noemen. De map bevindt zich in dezelfde map als de rest van de scriptbestanden.

3.Ga naar het bestand redden_ gebruiker. php en voeg de volgende code toe nadat u de spaties uit de login en het wachtwoord hebt verwijderd:

//verwijder extra spaties
$login = trim($login);

// nieuwe toevoegen *****************************************

// voeg een controle toe voor de lengte van de login en het wachtwoord
if (strlen($login)< 3 or strlen($login) > 15) {
exit("Inloggen moet uit minimaal 3 tekens bestaan ​​en niet meer dan 15.");
}
if (strlen($wachtwoord)< 3 or strlen($password) > 15) {
exit("Wachtwoord moet minimaal 3 tekens bevatten en niet meer dan 15.");
}

if (!empty($_POST["fupload"])) //controleer of de gebruiker de afbeelding heeft verzonden
{
$fupload=$_POST["fupload"]; $fupload = trim($fupload);
if ($fupload =="" of leeg($fupload)) (
unset($fupload);// als de variabele $fupload leeg is, verwijder deze dan
}
}
if (!isset($fupload) of leeg($fupload) of $fupload =="")
{
//als de variabele niet bestaat (de gebruiker heeft geen afbeelding verzonden), wijs er dan een vooraf voorbereide afbeelding aan toe met het opschrift “geen avatar”
$avatar = "avatars/net-avatara.jpg"; //je kunt net-avatara.jpg tekenen of het uit de bron halen
}
anders
{
//anders - laad de afbeelding van de gebruiker
$path_to_90_directory = "avatars/";//map waar de initiële afbeelding en de gecomprimeerde kopie ervan worden geladen

If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["naam"])) //controle van het bronafbeeldingsformaat
{
$bestandsnaam = $_FILES["fupload"]["naam"];
$source = $_FILES["fupload"]["tmp_name"];
$target = $pad_naar_90_map . $bestandsnaam;
move_uploaded_file($source, $target);//het origineel uploaden naar de map $path_to_90_directory
if(preg_match("/[.](GIF)|(gif)$/", $bestandsnaam)) (
$im = imagecreatefromgif($path_to_90_directory.$bestandsnaam) ; //als het origineel in GIF-formaat was, maak dan een afbeelding in hetzelfde formaat. Noodzakelijk voor daaropvolgende compressie
}
if(preg_match("/[.](PNG)|(png)$/", $bestandsnaam)) (
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//als het origineel in png-formaat was, maak dan de afbeelding in hetzelfde formaat. Noodzakelijk voor daaropvolgende compressie
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $bestandsnaam)) (
$im = imagecreatefromjpeg($path_to_90_directory.$bestandsnaam); //als het origineel in jpg-formaat was, maak dan een afbeelding in hetzelfde formaat. Noodzakelijk voor daaropvolgende compressie
}
//CREATIE VAN EEN VIERKANTE AFBEELDING EN DE DAARVOLGENDE COMPRESSIE GENOMEN VAN DE SITE www.codenet.ru
// Maak een vierkant van 90x90
// dest - de resulterende afbeelding
// w - afbeeldingsbreedte
// ratio - evenredigheidscoëfficiënt
$w = 90; // vierkant 90x90. Kan in andere maten geleverd worden.
// maak de originele afbeelding op basis van
// bronbestand en bepaal de grootte ervan
$w_src = afbeeldingenx($im); //bereken de breedte
$h_src = afbeeldingeny($im); //bereken de hoogte van de afbeelding
// maak een lege vierkante afbeelding
// Truecolor is belangrijk!, anders hebben we een 8-bits resultaat
$dest = afbeeldingcreatetruecolor($w,$w);
// knip het vierkante midden uit langs x als de foto horizontaal is
als ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
// knip de vierkante bovenkant langs y uit,
// als de foto verticaal is (hoewel je ook het midden kunt gebruiken)
als ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// vierkante afbeelding wordt geschaald zonder bijknippen
als ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$datum=tijd(); //bereken de huidige tijd.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//sla de afbeelding op in jpg-formaat in de gewenste map, de naam zal de huidige tijd zijn. Gemaakt om te voorkomen dat avatars dezelfde naam hebben.
// waarom jpg? Het neemt heel weinig ruimte in beslag + de animatie van de GIF-afbeelding, die de gebruiker afleidt, wordt vernietigd. Het is niet erg prettig om zijn commentaar te lezen als je vanuit je ooghoek beweging ziet.
$avatar = $path_to_90_directory.$date.".jpg";//plaats het pad naar de avatar in de variabele.
$delfull = $pad_naar_90_directory.$bestandsnaam;
unlink ($delfull);//verwijder de origineel geüploade afbeelding, we hebben deze niet langer nodig. De opdracht was om een ​​miniatuur te bemachtigen.
}
anders
{
//In geval van een niet-overeenkomende indeling, geeft u een overeenkomstig bericht weer
exit("De avatar moet de indeling JPG, GIF of PNG");
}
//einde van het laadproces en het toewijzen van de variabele $avatar aan het adres van de geladen ava
}



// nieuwe toegevoegd ********************************************* **
// Vervolgens komt alles uit het eerste deel van het artikel, maar u moet een wijziging aan de databasequery toevoegen.
// maak verbinding met de database
// controleer of er een gebruiker met dezelfde login bestaat
$result = mysql_query("SELECT id FROM gebruikers WHERE login="$login"",$db);
if (!empty($mijnrij["id"])) (
exit("Sorry, de door u ingevoerde login is al geregistreerd. Voer een andere login in.");
}
// als dit niet het geval is, sla dan de gegevens op
$result2 = mysql_query("INSERT INTO gebruikers (login,wachtwoord,avatar) VALUES("$login","$password","$avatar")");
// Controleer of er fouten zijn
als ($result2=="TRUE")
{
echo "Je bent succesvol geregistreerd! Nu kun je de site betreden. Homepagina";
}
anders(
echo "Fout! Je bent niet geregistreerd.";
}
?>

4. U moet één tabel aan dezelfde database toevoegen. Het slaat IP-adressen op die fouten hebben gemaakt bij het inloggen. Op deze manier kunnen we de toegang beperken tot degenen die meer dan drie keer achter elkaar fouten hebben gemaakt gedurende ongeveer 15 minuten. Ik denk dat programma's die wachtwoorden selecteren lang zullen moeten sleutelen.
Laten we naar phpmyadmin gaan en een nieuwe tabel maken met 3 velden:


ip - IP-adres.
datum - datum van mislukte aanmelding gedurende de laatste 15 minuten voor de gebruiker met dit IP-adres. col - het aantal fouten in de afgelopen 15 minuten voor de gebruiker met dit IP-adres.
Geweldig! Klaar, laten we nu het login- en wachtwoordverificatiebestand wijzigen, want nu is ons wachtwoord gecodeerd. Open testreg.php en verwijder alles behalve het verwijderen van spaties uit de login en het wachtwoord. Vervolgens voegen we de volgende code toe:

//verwijder extra spaties
$login = trim($login);
$wachtwoord = trim($wachtwoord);

// vervangen door een nieuwe********************************************* *********
// maak verbinding met de database
include("bd.php");// het bd.php-bestand moet zich in dezelfde map bevinden als alle andere, als dit niet het geval is, verander dan gewoon het pad
// minicontrole voor wachtwoordselectie
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (leeg($ip) || $ip=="onbekend") ( $ip=getenv("REMOTE_ADDR"); )//extract ip
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//verwijder de IP-adressen van gebruikers die na 15 minuten verkeerd hebben ingelogd.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db // haal uit de database het aantal mislukte inlogpogingen op van de afgelopen 15 voor een gebruiker met een bepaald IP-adres
$mijnrow = mysql_fetch_array($result);
if ($mijnrij["col"] > 2) (
//Als er meer dan twee fouten zijn, dat wil zeggen drie, geven we een bericht.
exit("Je hebt je gebruikersnaam of wachtwoord drie keer verkeerd ingevoerd. Wacht 15 minuten voordat je het opnieuw probeert.");
}
$password = md5($password);//versleutel het wachtwoord
$password = strrev($password);// voor betrouwbaarheid, voeg reverse toe
$wachtwoord = $wachtwoord."b3p6f";
//je kunt naar eigen smaak een paar van je eigen karakters toevoegen, bijvoorbeeld door "b3p6f" in te voeren. Als dit wachtwoord met brute kracht op dezelfde md5-server wordt gehackt, zal er uiteraard niets goeds van komen. Maar ik raad je aan om andere karakters te plaatsen, misschien aan het begin van de regel of in het midden.
//In dit geval is het noodzakelijk om de lengte van het wachtwoordveld in de database te vergroten. Het gecodeerde wachtwoord kan veel groter zijn.

$result = mysql_query("SELECT * VAN gebruikers WAAR login="$login" EN wachtwoord="$password"",$db); //haal alle gegevens over de gebruiker met de ingevoerde login en wachtwoord uit de database
$mijnrow = mysql_fetch_array($result);
if (leeg($mijnrij["id"]))
{
//als de gebruiker met de ingevoerde login en wachtwoord niet bestaat
//We registreren dat dit IP-adres niet kon inloggen.
$select = mysql_query("SELECT ip VAN oshibka WAAR ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (//controleer of de gebruiker in de "oshibka"-tabel staat
$result52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($result52);
$col = $myrow52 + 1;//voeg nog een mislukte inlogpoging toe
mysql_query("UPDATE fout SET col=$col,date=NU() WAAR ip="$ip"");
}
anders(
mysql_query("INSERT IN oshibka (ip,date,col) WAARDEN ("$ip",NOW(),"1")");
//als er de afgelopen 15 minuten geen fouten zijn opgetreden, voeg dan een nieuw item in de "oshibka"-tabel in
}

exit("Sorry, de login of het wachtwoord dat u heeft ingevoerd is onjuist.");
}
anders(
nbsp; //als de wachtwoorden overeenkomen, starten we een sessie voor de gebruiker! Je kunt hem feliciteren, hij is binnen!
$_SESSION["wachtwoord"]=$mijnrij["wachtwoord"];
$_SESSION["inloggen"]=$mijnrij["inloggen"];
$_SESSION["id"]=$myrow["id"];//deze gegevens worden heel vaak gebruikt, dus de ingelogde gebruiker zal deze “met zich meedragen”

//Vervolgens slaan we de gegevens op in cookies voor latere aanmelding.
//AANDACHT!!! DOE DIT NAAR UW GOEDDUNKEN, AANGEZIEN DE GEGEVENS ZONDER ENCRYPTIE IN COOKIES WORDEN OPGESLAGEN
if ($_POST["opslaan"] == 1) (
//Als de gebruiker wil dat zijn gegevens worden opgeslagen voor latere aanmelding, slaan we deze op in zijn browsercookies
setcookie("inloggen", $_POST["inloggen"], tijd()+9999999);
setcookie("wachtwoord", $_POST["wachtwoord"], tijd()+9999999);
}}
echo " ";//we leiden de gebruiker door naar de hoofdpagina, waar we hem op de hoogte stellen van een succesvolle login
?>

5. We zullen de hoofdpagina volledig veranderen. Het is noodzakelijk om de avatar van de gebruiker erop weer te geven, een link weer te geven om uit te loggen bij het account en een selectievakje toe te voegen om het wachtwoord te onthouden bij het inloggen.
Index.php

// de hele procedure werkt in sessies. Hier worden de gegevens van de gebruiker opgeslagen terwijl hij op de site is. Het is heel belangrijk om ze helemaal aan het begin van de pagina te lanceren!!!
sessie_start();
include("bd.php");// het bd.php-bestand moet zich in dezelfde map bevinden als alle andere, als dit niet het geval is, verander dan gewoon het pad
if (!empty($_SESSION["inloggen"]) en !empty($_SESSION["wachtwoord"]))
{
//Als er een login en wachtwoord in de sessies aanwezig zijn, controleer deze dan en haal de avatar op
$inloggen = $_SESSION["inloggen"];
$wachtwoord = $_SESSION["wachtwoord"];
$result = mysql_query("SELECT id,avatar FROM gebruikers WAAR login="$login" EN wachtwoord="$password"",$db);
$mijnrow = mysql_fetch_array($result);
// extraheer de benodigde gebruikersgegevens
}
?>


Startpagina


Startpagina

if (!isset($myrow["avatar"]) of $myrow["avatar"]=="") (
//controleer of gebruikersgegevens uit de database zijn gehaald. Zo niet, dan is hij niet ingelogd, of is het wachtwoord in de sessie onjuist. We tonen een inlogvenster. Maar we zullen het niet tentoonstellen aan degenen die binnenkomen, zij hebben het niet langer nodig.
afdrukken<<


HIER;

If (isset($_COOKIE["login"])) //is er een variabele met login in COOKIE. Dit zou het geval moeten zijn als de gebruiker tijdens de vorige login op het selectievakje "Onthoud mij" heeft geklikt
{
//Zo ja, voer dan de waarde ervan in het formulier in. In dit geval krijgt de gebruiker te zien dat zijn login al in de vereiste kolom is ingevoerd
echo " value="".$_COOKIE["inloggen"]."">";
}

afdrukken<<




HIER;

If (isset($_COOKIE["password"]))//of er een variabele met een wachtwoord in de COOKIE. Dit zou het geval moeten zijn als de gebruiker tijdens de vorige login op het selectievakje "Onthoud mij" heeft geklikt
{
//Zo ja, voer dan de waarde ervan in het formulier in. In dit geval krijgt de gebruiker te zien dat zijn wachtwoord al in de vereiste kolom is ingevoerd
echo " waarde="".$_COOKIE["wachtwoord"]."">";
}

Afdrukken<<



Onthoud mij.






Register



U bent ingelogd als gast

HIER;
}
anders
{
//Als de login succesvol is, krijgt de gebruiker alles hieronder tussen de sterretjes te zien.

afdrukken<<
U bent ingelogd op de site als $_SESSION (afsluiten)


Deze link is alleen beschikbaar voor geregistreerde gebruikers

Jouw avatar:




HIER;

//************************************************************************************
//als de login succesvol is, krijgt de gebruiker alles wat zich BOVEN tussen de sterretjes bevindt.
}
?>



6. Het is noodzakelijk om het voor ingelogde gebruikers mogelijk te maken om uit te loggen. Er was al een link om af te sluiten op de hoofdpagina. Maar dit bestand bestaat nog niet. Laten we dus een nieuw bestand maken exit.php met code:

sessie_start();
if (leeg($_SESSION["inloggen"]) of leeg($_SESSION["wachtwoord"]))
{
//Als er geen sessie is met login en wachtwoord, dan is dit bestand geopend door een niet-ingelogde gebruiker. Hij hoort hier niet. We geven een foutmelding en stoppen het script
exit ("Toegang tot deze pagina is alleen toegestaan ​​voor geregistreerde gebruikers. Als u geregistreerd bent, log dan in op de site met uw gebruikersnaam en wachtwoord
Startpagina");
}

unset($_SESSION["wachtwoord"]);
unset($_SESSION["inloggen"]);
unset($_SESSION["id"]);// vernietig variabelen in sessies
Uitgang(" ");
// stuur de gebruiker naar de hoofdpagina.
?>

Nou, dat is het! Geniet ervan voor uw gezondheid! Succes!

Ik heb besloten dit artikel op te dragen aan iedereen die begint met studeren PHP omdat iedereen dezelfde fout krijgt. Ik weet niet waarom ze het toestaan, maar ze doen het de hele tijd. Ik zal zonder overdrijving zeggen dat ik al ongeveer honderd vragen heb ontvangen, die in dit artikel zullen worden beantwoord. Deze fout houdt verband met onjuiste lancering in PHP.

Zoals bijna alle beginners doen:

  1. Creëren PHP-bestand(Soms HTML-bestand, maar dit zijn de meeste beginners).
  2. Schrijf het daar op PHP-code.
  3. En ze dubbelklikken om het in de browser te openen.

Het resultaat is dat de browser de code opent, maar geen haast heeft om deze uit te voeren. Het geeft eenvoudigweg enkele stukjes code weer in platte tekst, of geeft helemaal niets weer.

De fout van deze aanpak is dat de student dat niet begrijpt PHP is een server-side taal, niet cliënt. Dit HTML of JavaScript clienttalen, deze worden uiteraard door de browser verwerkt. Maar voor PHP heeft een tolk nodig. En deze tolk wordt gelanceerd door de server.

Conclusie: je moet PHP-code via de server uitvoeren. Als je dat hebt Denwer, dat wil zeggen, via hem.

Nu, Hoe PHP-code uit te voeren via Denwer. De meeste beginners maken opnieuw dezelfde fout. Ze lijken alles correct te doen, de nodige mappen aan te maken, opnieuw op te starten Denwer en het lijkt erop dat het enige dat overblijft is het bestand correct aan te roepen. Maar ook hier is er weer een fout: ze openen het bestand opnieuw eenvoudig in de browser (door het bestand naar de browser te slepen of door te dubbelklikken). Dit kunt u gemakkelijk zien aan het adres in de adresbalk. Er zal zoiets zijn als: bestand:///Z:\home\mijnsite.local\www\script.php.

En je moet het correct starten, het virtuele hostadres invoeren. Dat wil zeggen, voer direct in de adresbalk van de browser het volgende in: http://mijnsite.local/script.php- dat is alles, nu wordt het script uitgevoerd en wordt het resultaat weergegeven.

Ik hoop dat dit artikel veel beginners zal helpen die net beginnen met studeren PHP.

#erbij betrekken
#erbij betrekken
int regcomp(regex_t *zwanger, const char *regex, intcflags);
int regexec(const regex_t *zwanger, const char *snaar, maat_tovereenkomen,
regmatch_tpmatch, intvlaggen);
size_t regerror(intfoutcode, const regex_t *zwanger, teken *fout,
maat_terrbuf_grootte);
ongeldig regfree(regex_t *zwanger);

BESCHRIJVING

Het compileren van POSIX reguliere expressies

Functie regcomp() wordt gebruikt om de reguliere expressie te compileren in een formaat dat geschikt is voor latere zoekopdrachten regexec().

regcomp() er wordt een verwijzing naar het opslaggebied van de buffersjabloon doorgegeven zwanger, verwijzing naar een op nul eindigende tekenreeks regex en vlaggen cflags, gebruikt om het compilatietype te bepalen.

Alle zoekopdrachten met reguliere expressies moeten worden uitgevoerd met behulp van een gecompileerd bufferpatroon, dus regexec() moet altijd worden aangeroepen met het adres van de buffersjabloon die door de functie is geïnitialiseerd regcomp().

Betekenis cflags kan uit bitsgewijze bestaan of nul of meer van de volgende waarden:

REG_EXTENDED Gebruik de uitgebreide syntaxis van reguliere expressies van POSIX tijdens de interpretatie regex. Als deze vlag niet is ingeschakeld, wordt de syntaxis van eenvoudige reguliere expressies van POSIX gebruikt. REG_ICASE Negeer casus. Volgende zoekopdrachten regexec() Het gebruik van dit bufferpatroon is niet hoofdlettergevoelig. REG_NOSUB Rapporteer de stand van wedstrijden niet. Opties overeenkomen En pmatch Voor regexec() worden genegeerd als het gegeven buffersjabloon is gecompileerd terwijl deze vlag is ingeschakeld. REG_NEWLINE Matchoperatoren met welk teken dan ook komen niet overeen met het nieuweregelteken.

Lijst met niet-overeenkomende tekens ( [^...] ) zonder een nieuweregelteken is niet hetzelfde als een nieuweregel.

Vergelijkingsoperator gebaseerd op het begin van een tekenreeks ( ^ ) komt hoe dan ook overeen met de lege string onmiddellijk na de nieuwe regel vlaggen, executievlaggen regexec(), bevatten REG_NOTBOL.

De vergelijkingsoperator voor het einde van de regel ($) matcht de lege tekenreeks met het teken voor het begin van de regel, wat er ook gebeurt vlaggen bevat REG_NOTEOL.

Vergelijking met reguliere expressie van POSIX

Functie regexec() wordt gebruikt om een ​​op nul eindigende tekenreeks te vergelijken met een voorbewerkt bufferpatroon zwanger. Argumenten overeenkomen En pmatch worden gebruikt om informatie te verstrekken over de locatie van eventuele wedstrijden. Betekenis vlaggen kan bitgewijs zijn OFéén of beide waarden REG_NOTBOL En REG_NOTEOL. Deze waarden bepalen het gedrag van het vergelijkingsproces zoals hieronder beschreven. REG_NOTBOL De vergelijkingsoperator aan het begin van de string faalt altijd (maar zie de hierboven beschreven compilatievlag). REG_NEWLINE). Deze vlag kan gebruikt worden wanneer regexec() afzonderlijke delen van een string worden verzonden, en het begin van een dergelijke string mag in dit geval niet worden geïnterpreteerd als het begin van een nieuwe regel. REG_NOTEOL De end-of-line-vergelijkingsoperator faalt altijd (maar zie de hierboven beschreven compilatievlag). REG_NEWLINE).

Byte-offsets

Als REG_NOSUB niet is ingesteld bij het samenstellen van het buffersjabloon, is het mogelijk informatie te verkrijgen over de positie van matches. Betekenis pmatch moet worden gedefinieerd om op zijn minst te hebben overeenkomen elementen. Ze raken vol regexec() adressen van inline-matches. Offsets van een subexpressie beginnend met i- haakjes openen, opgeslagen in pmatch[ik]. Het matchadres van de gehele reguliere expressie wordt opgeslagen in pmatch(merk op dat om de match-offsets te retourneren N subuitdrukkingen, betekenis overeenkomen moet tenminste zijn N+1). Alle ongebruikte structuurelementen zullen een waarde van -1 bevatten.

Structuur regmatch_t, wat een soort is pmatch, gedefinieerd in :

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

Elk element rm_so, niet gelijk aan -1, geeft de startoffset aan van de volgende overeenkomst van de grootste substring binnen de gegeven string. Relatief element rm_eo geeft de verschuiving van het einde van de overeenkomst aan, wat het eerste teken na de overeenkomende tekst is.

POSIX-foutrapportage

Functie regerr gebruikt om foutcodes te converteren die mogelijk worden ontvangen regcomp() En regexec(), in foutmeldingsregels.

IN regerr verzonden: foutcode foutcode, bufferpatroon zwanger, verwijzing naar tekenreeksbuffer fout en rijbuffergrootte errbuf_grootte. De functie retourneert de grootte fout, wat nodig is om het foutbericht op te slaan als een op nul eindigende tekenreeks. Als en fout, En errbuf_grootte zijn dus niet gelijk aan nul fout eerst gevuld errbuf_size - 1 foutmeldingstekens en eindigt met een null-byte ("\0").

Een POSIX-sjabloonbuffer vrijmaken

Functie regvrij() maakt het geheugen vrij dat is toegewezen aan de buffersjabloon zwanger tijdens het compilatieproces met behulp van regcomp().

RETOURWAARDE

Functie regcomp() retourneert nul bij een succesvolle compilatie of anders een foutcode.

Functie regexec() retourneert nul bij overeenkomst of REG_NOMATCH, als er geen wedstrijden waren.

FOUTEN

Functie regcomp() kan de volgende fouten retourneren: REG_BADBR Onjuist gebruik van de backlink-operator. REG_BADPAT Onjuist gebruik van sjabloonoperatoren, zoals groeps- of lijstoperatoren. REG_BADRPT Onjuist gebruik van herhalingsoperatoren, zoals het gebruik van "*" als eerste teken. REG_EBRACE Ongepaarde haakjes in intervaloperatoren. REG_EBRACK Ongepaarde vierkante haken in lijstinstructies. REG_ECOLLATE Ongeldig sorteerelement. REG_ECTYPE Onbekende tekenklassenaam. REG_EEND Mogelijke fout. Niet gedefinieerd in POSIX.2. REG_EESCAPE Achterblijvende backslash. REG_EPAREN Ongepaarde haakjes in groeperingsoperatoren. REG_ERANGE Onjuist gebruik van de gebiedsoperator: het einde van het gebied verschijnt bijvoorbeeld vóór het begin ervan. REG_ESIZE De gecompileerde reguliere expressie vereist een bufferpatroon dat groter is dan 64 KB. Dit is niet gedefinieerd in POSIX.2. REG_ESPACE Reguliere expressieroutines hebben onvoldoende geheugen. REG_ESUBREG Ongeldige terugverwijzing naar subexpressie.