Vulgar reg comp php. Man regcomp(3): POSIX regular expression functions. Paghahambing sa regular na expression ng POSIX

Una, pagbubutihin namin ang pahina ng pagpaparehistro sa pamamagitan ng pagdaragdag ng kakayahang mag-upload ng avatar. Ang pinagmulang larawan ay dapat nasa jpg, gif o png na format. Dapat din itong hindi hihigit sa 2 MB. Huwag mag-alala, pagkatapos itong ma-compress ng script, ang laki ng avatar ay magiging mga 3 kb at jpg na format. Buksan ang pahina reg.php at idagdag ito sa tag < anyo> linya enctype="multipart/form-data", tulad ng sa halimbawa:


Pagpaparehistro










Ngayon mag-ipon tayo reg.php

2. Pagkatapos ay kailangan mong lumikha ng isa pang field sa talahanayan mga gumagamit. Tara na sa phpmyadmin, piliin ang nais na database at talahanayan.


Itinakda namin ang lahat ng mga halaga tulad ng sa figure:

Ang landas patungo sa avatar ay itatala sa field na ito, at ito ay ise-save sa isang hiwalay na folder, tawagin natin itong "mga avatar". Ang folder ay matatagpuan sa parehong direktoryo tulad ng iba pang mga script file.

3.Pumunta sa file iligtas_ gumagamit. php at idagdag ang sumusunod na code pagkatapos alisin ang mga puwang mula sa pag-login at password:

//alisin ang mga karagdagang espasyo
$login = trim ($login);

// magdagdag ng bagong ********************************************

//magdagdag ng tseke para sa haba ng login at password
kung (strlen($login)< 3 or strlen($login) > 15) {
exit("Ang pag-login ay dapat na binubuo ng hindi bababa sa 3 character at hindi hihigit sa 15.");
}
kung (strlen($password)< 3 or strlen($password) > 15) {
exit("Ang password ay dapat na hindi bababa sa 3 character at hindi hihigit sa 15.");
}

kung (!empty($_POST["fupload"])) //suriin kung naipadala ng user ang larawan
{
$fupload=$_POST["fupload"]; $fupload = trim ($fupload);
kung ($fupload =="" o walang laman($fupload)) (
unset($fupload);// kung ang $fupload variable ay walang laman, pagkatapos ay tanggalin ito
}
}
kung (!isset($fupload) o walang laman($fupload) o $fupload =="")
{
//kung ang variable ay hindi umiiral (ang user ay hindi nagpadala ng isang imahe), pagkatapos ay italaga ito ng isang pre-prepared na larawan na may inskripsyon na "walang avatar"
$avatar = "avatars/net-avatara.jpg"; //maaari kang gumuhit ng net-avatara.jpg o kunin ito mula sa pinagmulan
}
iba pa
{
//kung hindi man - i-load ang larawan ng user
$path_to_90_directory = "avatars/";//folder kung saan ilo-load ang unang larawan at ang naka-compress na kopya nito

If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["pangalan"])) //pagsusuri sa format ng pinagmulang larawan
{
$filename = $_FILES["fupload"]["name"];
$source = $_FILES["fupload"]["tmp_name"];
$target = $path_to_90_directory . $filename;
move_uploaded_file($source, $target);//pag-upload ng orihinal sa folder na $path_to_90_directory
if(preg_match("/[.](GIF)|(gif)$/", $filename)) (
$im = imagecreatefromgif($path_to_90_directory.$filename) ; //kung ang orihinal ay nasa gif na format, pagkatapos ay lumikha ng isang imahe sa parehong format. Kinakailangan para sa kasunod na compression
}
if(preg_match("/[.](PNG)|(png)$/", $filename)) (
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//kung ang orihinal ay nasa png na format, pagkatapos ay gawin ang larawan sa parehong format. Kinakailangan para sa kasunod na compression
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $filename)) (
$im = imagecreatefromjpeg($path_to_90_directory.$filename); //kung ang orihinal ay nasa jpg na format, pagkatapos ay lumikha ng isang imahe sa parehong format. Kinakailangan para sa kasunod na compression
}
//PAGLIKHA NG ISANG SQUARE IMAGE AT ANG KASUNOD NA COMPRESSION NITO NA KINUHA MULA SA SITE www.codenet.ru
// Lumikha ng 90x90 square
// dest - ang nagresultang imahe
// w - lapad ng larawan
// ratio - koepisyent ng proporsyonalidad
$w = 90; // parisukat 90x90. Maaaring ibigay sa iba pang mga sukat.
// lumikha ng orihinal na imahe batay sa
// source file at tukuyin ang laki nito
$w_src = imagesx($im); //kalkulahin ang lapad
$h_src = imagesy($im); //kalkulahin ang taas ng imahe
// lumikha ng walang laman na parisukat na imahe
// truecolor ay mahalaga!, kung hindi, magkakaroon tayo ng 8-bit na resulta
$dest = imagecreatetruecolor($w,$w);
// gupitin ang square center kasama ang x kung pahalang ang larawan
kung ($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));
// gupitin ang parisukat na tuktok sa kahabaan ng y,
// kung patayo ang larawan (bagaman maaari mo ring gamitin ang gitna)
kung ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// ang parisukat na imahe ay naka-scale nang walang clipping
kung ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$date=time(); //kalkulahin ang kasalukuyang oras.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//i-save ang larawan sa jpg na format sa nais na folder, ang pangalan ay ang kasalukuyang oras. Ginawa upang pigilan ang mga avatar na magkaroon ng parehong mga pangalan.
//bakit jpg? Ito ay tumatagal ng napakaliit na espasyo + ang animation ng GIF na imahe, na nakakagambala sa gumagamit, ay nawasak. Hindi masyadong kasiya-siyang basahin ang kanyang komento kapag may napansin kang paggalaw sa gilid ng iyong mata.
$avatar = $path_to_90_directory.$date.".jpg";//ilagay ang path sa avatar sa variable.
$delfull = $path_to_90_directory.$filename;
i-unlink ($delfull);//tanggalin ang orihinal na na-upload na larawan, hindi na namin ito kailangan. Ang gawain ay upang makakuha ng isang miniature.
}
iba pa
{
//sa kaso ng hindi pagkakatugma ng format, mag-isyu ng kaukulang mensahe
exit("Dapat nasa format ang avatar JPG, GIF o PNG");
}
//pagtatapos ng proseso ng paglo-load at pagtatalaga sa $avatar variable ang address ng na-load na ava
}



// nagdagdag ng bagong *********************************************** **
// Susunod na darating ang lahat mula sa unang bahagi ng artikulo, ngunit kailangan mong magdagdag ng pagbabago sa query sa database.
//kunekta sa database
// suriin ang pagkakaroon ng user na may parehong login
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
kung (!empty($myrow["id"])) (
exit("Paumanhin, ang login na iyong ipinasok ay nakarehistro na. Mangyaring magpasok ng isa pang login.");
}
// kung hindi ito ang kaso, pagkatapos ay i-save ang data
$result2 = mysql_query("INSERT INTO users (login,password,avatar) VALUES("$login","$password","$avatar")");
// Suriin kung may mga error
kung ($result2=="TRUE")
{
echo "Matagumpay kang nakarehistro! Ngayon ay maaari kang pumasok sa site. Home page";
}
iba pa(
echo "Error! Hindi ka nakarehistro.";
}
?>

4. Kailangan mong magdagdag ng isang talahanayan sa parehong database. Mag-iimbak ito ng mga IP address na nagkamali kapag nag-log in. Sa ganitong paraan maaari nating limitahan ang pag-access sa mga nagkamali nang higit sa tatlong beses na magkakasunod sa loob ng humigit-kumulang 15 minuto.
Pumunta tayo sa phpmyadmin at gumawa ng bagong table na may 3 field:


ip - IP address.
petsa - petsa ng hindi matagumpay na pag-log in sa huling 15 minuto para sa user na may ganitong ip. col - ang bilang ng mga error sa nakalipas na 15 minuto para sa user na may ganitong ip.
Mahusay! Tapos na, ngayon ay baguhin natin ang login at password verification file, dahil naka-encrypt na ngayon ang aming password. Buksan ang testreg.php at tanggalin ang lahat ng lampas sa pag-alis ng mga puwang mula sa login at password. Susunod, idagdag namin ang sumusunod na code:

//alisin ang mga karagdagang espasyo
$login = trim ($login);
$password = trim ($password);

// palitan ng bago ******************************************* *******
// kumonekta sa database
include("bd.php");// ang bd.php file ay dapat nasa parehong folder tulad ng lahat ng iba pa, kung hindi, palitan lang ang path
// mini-check para sa pagpili ng password
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=="unknown") ($ip=getenv("REMOTE_ADDR"); )//extract ip
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//delete ang mga IP address ng mga user na nag-log in nang hindi tama pagkatapos ng 15 minuto.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db); // kunin mula sa database ang bilang ng mga hindi matagumpay na pagsubok sa pag-log in sa huling 15 para sa isang user na may ibinigay na ip
$myrow = mysql_fetch_array($result);
kung ($myrow["col"] > 2) (
//kung mayroong higit sa dalawang error, ibig sabihin, tatlo, pagkatapos ay maglalabas kami ng mensahe.
exit("Maling naipasok mo ang iyong username o password nang 3 beses. Mangyaring maghintay ng 15 minuto bago subukang muli.");
}
$password = md5($password);//i-encrypt ang password
$password = strrev($password);// para sa pagiging maaasahan, magdagdag ng reverse
$password = $password."b3p6f";
//maaari kang magdagdag ng ilan sa iyong sariling mga character sa iyong panlasa, halimbawa, sa pamamagitan ng pagpasok ng "b3p6f". Kung ang password na ito ay na-hack ng malupit na puwersa sa parehong md5 server, kung gayon ay malinaw na walang magandang mangyayari dito. Ngunit ipinapayo ko sa iyo na maglagay ng iba pang mga character, marahil sa simula ng linya o sa gitna.
//Sa kasong ito, kinakailangan upang taasan ang haba ng field ng password sa database. Maaaring mas malaki ang naka-encrypt na password.

$result = mysql_query("SELECT * FROM users WHERE login="$login" AND password="$password"",$db); //kunin mula sa database ang lahat ng data tungkol sa user na may inilagay na login at password
$myrow = mysql_fetch_array($result);
kung (walang laman($myrow["id")))
{
//kung ang user na may inilagay na login at password ay wala
//Gumawa kami ng rekord na hindi maka-log in ang ip na ito.
$select = mysql_query("SELECT ip FROM oshibka WHERE ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (//check kung ang user ay nasa table na "oshibka".
$result52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($result52);
$col = $myrow52 + 1;//magdagdag ng isa pang hindi matagumpay na pagsubok sa pag-log in
mysql_query("I-UPDATE ang error SET col=$col,date=NOW() WHERE ip="$ip"");
}
iba pa(
mysql_query("INSERT INTO oshibka (ip,date,col) VALUES ("$ip",NOW(),"1")");
//kung walang mga error sa huling 15 minuto, pagkatapos ay magpasok ng bagong entry sa talahanayan ng "oshibka"
}

exit("Paumanhin, ang username o password na iyong inilagay ay hindi tama.");
}
iba pa(
nbsp; //kung tumugma ang mga password, maglulunsad kami ng session para sa user! Maaari mo siyang batiin, nakapasok siya!
$_SESSION["password"]=$myrow["password"];
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//ang data na ito ay madalas na ginagamit, kaya ang naka-log in na user ay "dalhin ito kasama niya"

//Susunod ay ise-save namin ang data sa cookies para sa kasunod na pag-login.
//PANSIN!!! GAWIN MO ITO AYON SA IYONG PAGPAPASYA DAHIL ANG DATA AY NA-INISOK SA COOKIES NA WALANG ENCRYPTION
kung ($_POST["save"] == 1) (
//Kung gusto ng user na ma-save ang kanyang data para sa kasunod na pag-login, ise-save namin ito sa cookies ng kanyang browser
setcookie("login", $_POST["login"], oras()+9999999);
setcookie("password", $_POST["password"], oras()+9999999);
}}
echo" "; // nire-redirect namin ang user sa pangunahing pahina, kung saan aabisuhan namin siya ng matagumpay na pag-log in
?>

5. Ganap naming babaguhin ang pangunahing pahina. Kinakailangang ipakita ang avatar ng user dito, magpakita ng link para mag-log out sa account at magdagdag ng checkbox para matandaan ang password kapag nag-log in.
Index.php

// gumagana ang buong procedure sa mga session. Ito ay kung saan naka-imbak ang data ng user habang siya ay nasa site. Napakahalaga na ilunsad ang mga ito sa pinakadulo simula ng pahina!!!
session_start();
include("bd.php");// ang bd.php file ay dapat nasa parehong folder tulad ng lahat ng iba pa, kung hindi, palitan lang ang path
kung (!empty($_SESSION["login"]) at !empty($_SESSION["password"]))
{
//kung mayroong login at password sa mga session, pagkatapos ay suriin ang mga ito at kunin ang avatar
$login = $_SESSION["login"];
$password = $_SESSION["password"];
$result = mysql_query("SELECT id,avatar FROM users WHERE login="$login" AND password="$password"",$db);
$myrow = mysql_fetch_array($result);
//extract ang kinakailangang data ng user
}
?>


Home page


Home page

kung (!isset($myrow["avatar"]) o $myrow["avatar"]=="") (
//suriin kung ang data ng user ay nakuha mula sa database. Kung hindi, hindi siya naka-log in, o hindi tama ang password sa session. Nagpapakita kami ng window sa pag-login. Pero hindi namin ipapakita sa mga papasok, hindi na nila kailangan.
print<<


DITO;

If (isset($_COOKIE["login"])) //may variable bang may login sa COOKIE. Dapat ay kung nag-click ang user sa checkbox na "Tandaan ako" sa nakaraang pag-login
{
//kung oo, pagkatapos ay ipasok ang halaga nito sa form. Sa kasong ito, ang gumagamit ay ipinapakita na ang kanyang pag-login ay naipasok na sa kinakailangang hanay
echo " value="".$_COOKIE["login"]."">";
}

print<<




DITO;

Kung (isset($_COOKIE["password"]))//kung mayroong variable na may password sa COOKIE. Dapat ay kung nag-click ang user sa checkbox na "Tandaan ako" sa nakaraang pag-login
{
//kung oo, pagkatapos ay ipasok ang halaga nito sa form. Sa kasong ito, ang user ay ipinapakita na ang kanyang password ay naipasok na sa kinakailangang hanay
echo " value="".$_COOKIE["password"]."">";
}

Print<<



Tandaan mo ako.






Magrehistro



Naka-log in ka bilang bisita

DITO;
}
iba pa
{
//kung matagumpay ang pag-log in, ibibigay sa user ang lahat sa ibaba sa pagitan ng mga asterisk.

print<<
Naka-log in ka sa site bilang $_SESSION (exit)


Ang link na ito ay magagamit lamang sa mga rehistradong user

Ang iyong avatar:




DITO;

//************************************************************************************
//kung matagumpay ang pag-log in, ibibigay sa user ang lahat ng nasa ITAAS sa pagitan ng mga asterisk.
}
?>



6. Ito ay kinakailangan upang gawing posible para sa mga naka-log in na gumagamit na mag-log out. Mayroon nang isang link upang lumabas sa pangunahing pahina. Ngunit ang file na ito ay hindi pa umiiral. Kaya gumawa tayo ng bagong file exit.php may code:

session_start();
kung (walang laman($_SESSION["pag-login"]) o walang laman($_SESSION["password"]))
{
//kung walang session na may login at password, ang file na ito ay na-access ng isang hindi naka-log in na user. Hindi siya bagay dito. Nag-isyu kami ng mensahe ng error at itinigil ang script
exit ("Ang pag-access sa pahinang ito ay pinapayagan lamang sa mga rehistradong gumagamit. Kung ikaw ay nakarehistro, pagkatapos ay mag-log in sa site gamit ang iyong username at password
Home page");
}

unset($_SESSION["password"]);
unset($_SESSION["login"]);
unset($_SESSION["id"]);// sirain ang mga variable sa mga session
labasan(" ");
// ipadala ang user sa pangunahing pahina.
?>

Well, iyon lang! Tangkilikin ito para sa iyong kalusugan! Good luck!

Napagpasyahan kong ialay ang artikulong ito sa lahat ng nagsisimulang mag-aral PHP dahil ang lahat ay nakakakuha ng parehong error. Hindi ko alam kung bakit nila pinapayagan ito, ngunit ginagawa nila ito sa lahat ng oras. Sasabihin ko nang walang pagmamalabis na nakatanggap na ako ng halos isang daang mga katanungan, na sasagutin sa artikulong ito. Ang error na ito ay nauugnay sa maling paglulunsad sa PHP.

Tulad ng ginagawa ng halos lahat ng mga nagsisimula:

  1. Lumikha PHP file(Minsan HTML file, ngunit ito ang pinakamaraming nagsisimula).
  2. Isulat mo doon PHP code.
  3. At nag-double click sila para buksan ito sa browser.

Ang resulta ay binubuksan ng browser ang code, ngunit hindi nagmamadaling isagawa ito. Nagpapakita lamang ito ng ilang piraso ng code sa plain text, o hindi nagpapakita ng kahit ano.

Ang pagkakamali ng pamamaraang ito ay hindi iyon naiintindihan ng mag-aaral Ang PHP ay isang server-side na wika, hindi kliyente. Ito HTML o JavaScript mga wika ng kliyente, siyempre pinoproseso sila ng browser. Ngunit para sa Kailangan ng PHP ng interpreter. At ang interpreter na ito ay inilunsad ng server.

Konklusyon: kailangan mong patakbuhin ang PHP code sa pamamagitan ng server. Kung mayroon ka Denwer, ibig sabihin, sa pamamagitan niya.

ngayon, kung paano patakbuhin ang PHP code sa pamamagitan ng Denver. Karamihan sa mga nagsisimula ay muling gumawa ng parehong pagkakamali. Mukhang ginagawa nila nang tama ang lahat, lumilikha ng mga kinakailangang folder, nag-restart Denwer at tila ang natitira na lang ay ang tawagan ng tama ang file. Ngunit narito muli mayroong isang error: muli nilang binuksan ang file sa browser (alinman sa pamamagitan ng pag-drag ng file sa browser o sa pamamagitan ng pag-double click). Madali itong makita ng address sa address bar. Magkakaroon ng isang bagay tulad ng: file:///Z:\home\mysite.local\www\script.php.

At kailangan mong ilunsad ito nang tama, pagpasok ng virtual host address. Iyon ay, direkta sa address bar ng browser, ipasok ang: http://mysite.local/script.php- iyon lang, ngayon ang script ay tatakbo at ipapakita ang resulta nito.

Sana ay makatulong ang artikulong ito sa maraming baguhan na nagsisimula pa lamang sa pag-aaral PHP.

#isama
#isama
int regcomp(regex_t *preg, const char *regex, intmga cflag);
int regexec(const regex_t *preg, const char *string, laki_tnmatch,
regmatch_tpmatch, intmga bandila);
size_t regerror(interrcode, const regex_t *preg, char *errbuf,
laki_terrbuf_size);
void regfree(regex_t *preg);

PAGLALARAWAN

Pag-compile ng mga regular na expression ng POSIX

Function regcomp() ay ginagamit upang i-compile ang regular na expression sa isang format na angkop para sa mga kasunod na paghahanap gamit regexec().

regcomp() isang pointer sa lugar ng imbakan ng buffer template ay ipinasa preg, pointer sa isang null-terminated string regex at mga watawat mga cflag, ginagamit upang matukoy ang uri ng compilation.

Ang lahat ng mga regular na paghahanap ng expression ay dapat gawin gamit ang isang pinagsama-samang pattern ng buffer, kaya regexec() ay dapat palaging tinatawag na may address ng buffer template na sinimulan ng function regcomp().

Ibig sabihin mga cflag maaaring binubuo ng bitwise o zero o higit pa sa mga sumusunod na halaga:

REG_EXTENDED Gumamit ng POSIX extended regular expression syntax sa panahon ng interpretasyon regex. Kung hindi pinagana ang flag na ito, POSIX simpleng regular expression syntax ang ginagamit. REG_ICASE Huwag pansinin ang kaso. Mga kasunod na paghahanap regexec() ang paggamit ng buffer pattern na ito ay hindi magiging case sensitive. REG_NOSUB Huwag iulat ang posisyon ng mga laban. Mga pagpipilian nmatch At pmatch Para sa regexec() ay binabalewala kung ang ibinigay na buffer template ay pinagsama-sama sa flag na ito na pinagana. REG_NEWLINE Ang mga operator ng pagtutugma sa anumang karakter ay hindi tumutugma sa bagong linya na karakter.

Listahan ng mga hindi tugmang character ( [^...] ) na walang newline na character ay hindi katulad ng isang newline.

Operator ng paghahambing batay sa simula ng isang string ( ^ ) tumutugma sa walang laman na string pagkatapos ng bagong linya kahit na ano mga bandila, mga flag ng pagpapatupad regexec(), naglalaman ng REG_NOTBOL.

Ang end-of-line comparison operator ($) ay tumutugma sa walang laman na string hanggang sa start-of-line na character, kahit na ano mga bandila naglalaman ng REG_NOTEOL.

Paghahambing sa regular na expression ng POSIX

Function regexec() ay ginagamit upang ihambing ang isang null-terminated string sa isang pre-processed buffer pattern preg. Mga argumento nmatch At pmatch ay ginagamit upang magbigay ng impormasyon tungkol sa lokasyon ng anumang mga tugma. Ibig sabihin mga bandila maaaring bitwise O isa o parehong mga halaga REG_NOTBOL At REG_NOTEOL. Tinutukoy ng mga halagang ito ang pag-uugali ng proseso ng paghahambing tulad ng inilarawan sa ibaba. REG_NOTBOL Ang operator ng paghahambing sa simula ng string ay palaging nabigo (ngunit tingnan ang flag ng compilation na inilarawan sa itaas REG_NEWLINE). Maaaring gamitin ang watawat na ito kapag regexec() ang mga hiwalay na bahagi ng isang string ay ipinapadala, at ang simula ng naturang string sa kasong ito ay hindi dapat bigyang-kahulugan bilang simula ng isang bagong linya. REG_NOTEOL Palaging nabigo ang end-of-line comparison operator (ngunit tingnan ang flag ng compilation na inilarawan sa itaas REG_NEWLINE).

Mga byte offset

Kung REG_NOSUB ay hindi nakatakda kapag kino-compile ang buffer template, posibleng makakuha ng impormasyon tungkol sa posisyon ng mga tugma. Ibig sabihin pmatch dapat tukuyin na magkaroon ng hindi bababa sa nmatch elemento. Nagpupuno na sila regexec() mga address ng mga inline na tugma. Mga offset ng isang subexpression na nagsisimula sa i- bukas na panaklong, nakaimbak sa pmatch[i]. Ang tugmang address ng buong regular na expression ay naka-imbak sa pmatch(tandaan na upang ibalik ang mga offset ng tugma N mga subexpression, kahulugan nmatch dapat hindi bababa N+1). Ang anumang hindi nagamit na elemento ng istraktura ay maglalaman ng halaga na -1.

Istruktura regmatch_t, na isang uri pmatch, tinukoy sa :

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

Bawat elemento rm_so, hindi katumbas ng -1, ay nagpapahiwatig ng panimulang offset ng susunod na tugma ng pinakamalaking substring sa loob ng ibinigay na string. Kamag-anak na elemento rm_eo ay nagpapahiwatig ng offset ng pagtatapos ng tugma, na siyang unang character pagkatapos ng katugmang teksto.

Pag-uulat ng Error sa POSIX

Function regerror ginagamit upang i-convert ang mga error code na maaaring matanggap mula sa regcomp() At regexec(), sa mga linya ng mensahe ng error.

SA regerror ipinadala: error code errcode, pattern ng buffer preg, pointer sa character string buffer errbuf at laki ng buffer ng hilera errbuf_size. Ibinabalik ng function ang laki errbuf, na kinakailangan upang iimbak ang mensahe ng error bilang isang null-terminated string. Kung at errbuf, At errbuf_size ay hindi katumbas ng zero, kung gayon errbuf napuno muna errbuf_size - 1 mga character ng mensahe ng error at nagtatapos sa isang null byte ("\0").

Pagpapalaya ng buffer ng template ng POSIX

Function regfree() pinapalaya ang memorya na inilaan sa buffer template preg sa panahon ng proseso ng compilation gamit ang regcomp().

IBABALIK ANG HALAGA

Function regcomp() ay nagbabalik ng zero sa matagumpay na compilation o isang error code kung hindi man.

Function regexec() nagbabalik ng zero sa tugma o REG_NOMATCH, kung walang mga tugma.

MGA MALI

Function regcomp() ay maaaring ibalik ang mga sumusunod na error: REG_BADBR Maling paggamit ng backlink operator. REG_BADPAT Maling paggamit ng mga operator ng template, gaya ng mga operator ng grupo o listahan. REG_BADRPT Maling paggamit ng mga operator ng pag-uulit, gaya ng paggamit ng "*" bilang unang character. REG_EBRACE Mga hindi nakapares na panaklong sa mga operator ng interval. REG_EBRACK Mga hindi ipinares na square bracket sa mga statement ng listahan. REG_ECOLLATE Di-wastong elemento ng pag-uuri. REG_ECTYPE Hindi kilalang pangalan ng klase ng character. REG_EEND Potensyal na error. Hindi tinukoy sa POSIX.2. REG_EESCAPE Sumusunod na backslash. REG_EPAREN Mga hindi nakapares na panaklong sa mga operator ng pagpapangkat. REG_ERANGE Maling paggamit ng area operator: halimbawa, ang dulo ng lugar ay lilitaw bago ang simula nito. REG_ESIZE Ang pinagsama-samang regular na expression ay nangangailangan ng buffer pattern na mas malaki sa 64 KB. Hindi ito tinukoy sa POSIX.2. REG_ESPACE Naubusan na ng memory ang mga regular na expression routine. REG_ESUBREG Di-wastong backreference sa subexpression.