Man regcomp(3): POSIX-säännöllisen lausekkeen funktiot. Lataa Reg Organizer - järjestelmän puhdistus ja optimointi POSIX-säännöllisten lausekkeiden kokoaminen

Hei! Nyt yritämme toteuttaa yksinkertaisimman rekisteröinnin sivustolla PHP + MySQL:n avulla. Tätä varten Apache on asennettava tietokoneellesi. Käsikirjoituksemme toimintaperiaate on esitetty alla.

1. Aloitetaan luomalla käyttäjätaulukko tietokantaan. Se sisältää käyttäjätiedot (kirjautumistunnus ja salasana). Siirrytään phpmyadminiin (jos olet luomassa tietokantaa tietokoneellesi http://localhost/phpmyadmin/). Luo taulukko käyttäjiä, siinä on 3 kenttää.

Luon sen mysql-tietokantaan, voit luoda sen toiseen tietokantaan. Aseta seuraavaksi arvot kuvan mukaisesti:

2. Yhteys tähän taulukkoon vaaditaan. Luodaan tiedosto bd.php. Sen sisältö:

$db = mysql_connect("oma MySQL-palvelimesi","kirjautuminen tälle palvelimelle","salasana tälle palvelimelle");
mysql_select_db ("tietokannan nimi, johon muodostamme yhteyden", $db);
?>

Minun tapauksessani se näyttää tältä:

$db = mysql_connect("localhost","käyttäjä","1234");
mysql_select_db("mysql",$db);
?>

Tallentaa bd.php.
Loistava! Meillä on tietokannassa taulukko ja yhteys siihen. Nyt voit alkaa luoda sivua, jolle käyttäjät jättävät tietonsa.

3. Luo reg.php-tiedosto sisällöllä (kaikki kommentit sisällä):



Rekisteröinti


Rekisteröinti
















4. Luo tiedosto, joka syöttää tiedot tietokantaan ja tallentaa käyttäjän. save_user.php(kommentit sisällä):



{
}
//jos kirjautumistunnus ja salasana syötetään, käsittelemme ne niin, että tagit ja skriptit eivät toimi, et koskaan tiedä mitä ihmiset saattavat syöttää


//poista ylimääräiset välilyönnit
$kirjautuminen = trimmaus($kirjautuminen);
$salasana = trimmaus($salasana);
// muodostaa yhteyden tietokantaan
// tarkista, onko käyttäjä samalla kirjautumistunnuksella
$result = mysql_query("SELECT id FROM käyttäjiltä WHERE login="$kirjautuminen"",$db);
if (!empty($myrow["id"])) (
exit("Anteeksi, antamasi kirjautumistunnus on jo rekisteröity. Anna toinen kirjautumistunnus.");
}
// jos näin ei ole, tallenna tiedot
$result2 = mysql_query("LISÄÄ käyttäjiin (sisäänkirjautuminen,salasana) VALUES("$kirjautuminen","$salasana")");
// Tarkista, onko virheitä
jos ($tulos2=="TRUE")
{
echo "Olet onnistuneesti rekisteröitynyt! Nyt voit siirtyä sivustolle. Kotisivu";
}
muu(
echo "Virhe! Et ole rekisteröitynyt.";
}
?>

5. Nyt käyttäjämme voivat rekisteröityä! Seuraavaksi sinun on luotava "ovi" jo rekisteröityneille käyttäjille päästäkseen sivustolle. index.php(kommentit sisällä):

// koko menettely toimii istunnoissa. Se on paikka, johon käyttäjän tiedot tallennetaan hänen ollessaan sivustolla. On erittäin tärkeää käynnistää ne heti sivun alussa!!!
session_start();
?>


Kotisivu


Kotisivu











Rekisteröidy



// Tarkista, ovatko kirjautumis- ja käyttäjätunnuksen muuttujat tyhjiä
jos (tyhjä($_SESSION["kirjautuminen"]) tai tyhjä($_SESSION["id"]))
{
// Jos tyhjä, emme näytä linkkiä
echo "Olet kirjautunut sisään vieraana
Tämä linkki on vain rekisteröityneiden käyttäjien käytettävissä";
}
muu
{

Tiedostossa index.php Näytämme linkin, joka on avoinna vain rekisteröityneille käyttäjille. Tämä on koko komentosarjan tarkoitus - rajoittaa pääsyä mihin tahansa tietoon.

6. Jäljellä on tiedosto, jossa vahvistetaan syötetty käyttäjätunnus ja salasana. testreg.php (kommentit sisällä):

session_start();// koko menettely toimii istunnoissa. Se on paikka, johon käyttäjän tiedot tallennetaan hänen ollessaan sivustolla. On erittäin tärkeää käynnistää ne heti sivun alussa!!!
if (isset($_POST["kirjautuminen"])) ( $login = $_POST["kirjautuminen"]; if ($login == "") ( unset($login);) ) //kirjoita käyttäjän antama kirjautumistunnus käyttäjä $login-muuttujaan, jos se on tyhjä, tuhoa muuttuja
if (isset($_POST["salasana"])) ( $salasana=$_POST["salasana"]; if ($salasana =="") ( unset($salasana);) )
//laita käyttäjän syöttämä salasana $password-muuttujaan, jos se on tyhjä, tuhoa muuttuja
if (tyhjä($login) tai tyhjä($salasana)) //jos käyttäjä ei antanut kirjautumistunnusta tai salasanaa, annamme virheilmoituksen ja pysäytämme komentosarjan
{
exit("Et ole syöttänyt kaikkia tietoja, mene takaisin ja täytä kaikki kentät!");
}
//jos kirjautumistunnus ja salasana syötetään, käsittelemme ne niin, että tagit ja skriptit eivät toimi, et koskaan tiedä mitä ihmiset saattavat syöttää
$kirjautuminen = viivat($kirjautuminen);
$kirjautuminen = htmlspecialchars($login);
$salasana = viivat($salasana);
$salasana = htmlerikoismerkit($salasana);
//poista ylimääräiset välilyönnit
$kirjautuminen = trimmaus($kirjautuminen);
$salasana = trimmaus($salasana);
// muodostaa yhteyden tietokantaan
include("bd.php");// bd.php-tiedoston on oltava samassa kansiossa kaikkien muiden kanssa, jos se ei ole, vaihda polku

$result = mysql_query("SELECT * FROM käyttäjiltä WHERE login="$kirjautuminen"",$db); //hakea tietokannasta kaikki tiedot käyttäjästä syötetyllä kirjautumistunnuksella
$myrow = mysql_fetch_array($tulos);
if (tyhjä($myrow["salasana"]))
{
//jos käyttäjää, jolla on syötetty kirjautumistunnus, ei ole olemassa
}
muu(
//jos on, tarkista salasanat
if ($myrow["salasana"]==$salasana) (
//jos salasanat täsmäävät, käynnistämme istunnon käyttäjälle! Voit onnitella häntä, hän pääsi sisään!
$_SESSION["kirjautuminen"]=$myrow["kirjautuminen"];
$_SESSION["id"]=$myrow["id"];//näitä tietoja käytetään hyvin usein, joten sisäänkirjautunut käyttäjä "kultaa ne mukanaan"
echo "Olet onnistuneesti saapunut sivustolle! Kotisivu";
}
muu(
//jos salasanat eivät täsmää

Poistu ("Anteeksi, antamasi kirjautumistunnus tai salasana on virheellinen.");
}
}
?>

OK, nyt kaikki on ohi! Oppitunti voi olla tylsä, mutta erittäin hyödyllinen. Tässä näkyy vain rekisteröinnin idea, jonka jälkeen voit parantaa sitä: lisää suojausta, suunnittelua, tietokenttiä, lataa avatarit, kirjaudu ulos tilistä (tämä tehdään vain tuhoamalla muuttujat istunnosta toiminnolla pois päältä) ja niin edelleen. Onnea!

Tarkistin kaiken, toimii oikein!

Sisältö

ereg

ereg -- säännöllisen lausekkeen parillinen arvo
Kuvaus
int ereg (merkkijonomalli, merkkijono, array );

Etsii parillisia arvoja merkkijono kohdassa määritetyssä säännöllisessä lausekkeessa kuvio .

Jos suluissa oleville osamerkkijonoille löytyy parilliset arvot kuvio ja funktio kutsuttiin kolmannella argumentilla regs, sitten parilliset arvot tallennetaan elementteihin regs. $regs sisältää alimerkkijonon, joka alkaa ensimmäisellä vasemmalla suluilla; $regs sisältää alimerkkijonon, joka alkaa toisesta sulkumerkistä jne. $regs sisältää kopion merkkijono .

Haku on kirjainkoolla.

Funktio palauttaa tosi, jos merkkijonosta löytyi vastaava arvo kuviolle, tai epätosi, jos vastaavia arvoja ei löytynyt tai tapahtui virhe.

Seuraava koodi poimii päivämäärän ISO-muodossa ja tulostaa sen muodossa DD.MM.YYYY:

Esimerkki 1. ereg() esimerkki

If (ereg("(4))-((1,2))-((1,2)), $date, $regs)) ( echo "$regs.$regs.$regs"; ) else ( echo "Virheellinen päivämäärämuoto: $date"; )

ereg_replace

ereg_replace -- korvaa säännöllisen lausekkeen
Kuvaus
merkkijono ereg_replace(merkkijonomalli, merkkijonon vaihto, merkkijono merkkijono);

Tämä toiminto skannaa merkkijono parillisiin arvoihin k kuvio, korvaa sitten löydetyn tekstin tekstillä korvaus .

Jos kuvio sisältää siis alimerkkijonoja suluissa korvaus voi sisältää alimerkkijonoja, kuten \\ määrä, joka korvataan tekstillä, joka vastaa suluissa olevaa numeerista osamerkkijonoa; \\0 käsittelee koko merkkijonon sisällön. Enintään 9 alimerkkijonoa voidaan käyttää. Sulut voidaan ryhmitellä, jolloin ne lasketaan aloittavien sulkeiden mukaan. Esimerkiksi seuraava koodi tulostaa "Tämä oli testi" kolme kertaa:

Esimerkki 1 ereg_replace()

$string = "Tämä on testi"; echo ereg_replace(" on", "oli", $merkkijono); echo ereg_replace("()on", "\\1oli", $merkkijono); echo ereg_replace("(()on)", "\\2oli", $merkkijono);

Katso myös , , ja .

eregi

eregi - kirjainkoolla välitön haku säännöllisistä lausekkeista
Kuvaus
int eregi (merkkijonomalli, merkkijono, array );

eregi_replace

eregi_replace -- säännöllisen lausekkeen korvaaminen, jossa kirjainkoolla ei ole merkitystä
Kuvaus
merkkijono eregi_replace(merkkijonomalli, merkkijonon korvaus, merkkijono);

jakaa

split -- jakaa merkkijonon taulukoksi säännöllisen lausekkeen avulla
Kuvaus
taulukon jako (merkkijonomalli, merkkijono, int );

Palauttaa joukon merkkijonoja, joista jokainen on merkkijonon osamerkkijono, joka on muodostettu jakamalla merkkijono toisistaan ​​erotettuihin osiin kuvio. Jos tapahtuu virhe, funktio palauttaa epätosi.

Saat ensimmäiset 5 kenttää riviltä /etc/passwd:

Myönnetään.

Tämän ominaisuuden avulla voidaan tarjota vertailuja, joissa kirjainkoolla ei ole merkitystä tuotteissa, jotka tukevat vain kirjainkoon erottelua.

Päätin omistaa tämän artikkelin kaikille, jotka aloittavat opiskelun PHP koska kaikki saavat saman virheen. En tiedä miksi he sallivat sen, mutta he tekevät niin koko ajan. Sanon liioittelematta, että olen jo saanut noin sata kysymystä, joihin vastataan tässä artikkelissa. Tämä virhe liittyy virheellinen käynnistys PHP:ssä.

Kuten melkein kaikki aloittelijat tekevät:

  1. Luoda PHP-tiedosto(Joskus HTML-tiedosto, mutta nämä ovat aloittelijoimpia).
  2. Kirjoita se sinne PHP koodi.
  3. Ja he kaksoisnapsauttavat avatakseen sen selaimessa.

Tuloksena on, että selain avaa koodin, mutta sillä ei ole kiirettä suorittaa sitä. Se yksinkertaisesti näyttää joitain koodinpätkiä pelkkänä tekstinä tai ei näytä mitään.

Tämän lähestymistavan virhe on, että opiskelija ei ymmärrä sitä PHP on palvelinpuolen kieli, ei asiakas. Tämä HTML tai JavaScript asiakaskieliä, selain käsittelee ne tietysti. Mutta varten PHP tarvitsee tulkin. Ja palvelin käynnistää tämän tulkin.

Johtopäätös: sinun on suoritettava PHP-koodi palvelimen kautta. Jos sinulla on Denwer, eli hänen kauttaan.

Nyt, kuinka ajaa PHP-koodia Denwerin kautta. Useimmat aloittelijat tekevät saman virheen uudelleen. He näyttävät tekevän kaiken oikein, luovat tarvittavat kansiot ja käynnistävät uudelleen Denwer ja näyttää siltä, ​​että jäljellä on vain kutsua tiedosto oikein. Mutta tässä taas on virhe: he avaavat tiedoston uudelleen yksinkertaisesti selaimessa (joko vetämällä tiedoston selaimeen tai kaksoisnapsauttamalla). Tämä näkyy helposti osoitepalkissa olevasta osoitteesta. Tulee jotain tällaista: file:///Z:\home\omasivusto.local\www\script.php.

Ja sinun on käynnistettävä se oikein, syöttämällä virtuaalisen isäntäosoitteen. Eli kirjoita suoraan selaimen osoiteriville: http://omasivusto.local/script.php- Siinä kaikki, nyt skripti suoritetaan ja näyttää tuloksensa.

Toivon, että tämä artikkeli auttaa monia aloittelijoita, jotka ovat vasta aloittamassa opiskelua PHP.

#sisältää
#sisältää
int regcomp(regex_t *preg, const char *regex, intcliput);
int regexec(const regex_t *preg, const char *merkkijono, koko_tnmatch,
regmatch_tpmatch, intliput);
size_t regerror(intvirhekoodi, const regex_t *preg, merkki *errbuf,
koko_terrbuf_size);
void regfree(regex_t *preg);

KUVAUS

POSIX-säännöllisten lausekkeiden kääntäminen

Toiminto regcomp() käytetään säännöllisen lausekkeen kääntämiseen muotoon, joka sopii myöhempään hakuun regexec().

regcomp() osoitin puskurimallin tallennusalueelle välitetään preg, osoitin nollapääteiseen merkkijonoon regex ja liput cliput, jota käytetään kokoelmatyypin määrittämiseen.

Kaikki säännöllisten lausekkeiden haut on tehtävä käännetyn puskurimallin avulla, joten regexec() on aina kutsuttava funktion alustamalla puskurimallin osoitteella regcomp().

Merkitys cliput voi koostua bittikohtaisesti tai nolla tai useampi seuraavista arvoista:

REG_EXTENDED Käytä POSIXin laajennettua säännöllisen lausekkeen syntaksia tulkinnan aikana regex. Jos tämä lippu ei ole käytössä, käytetään POSIX-yksinkertaista säännöllisen lausekkeen syntaksia. REG_ICASE Ohita kirjainkoko. Myöhemmät haut regexec() käyttämällä tätä puskurimallia, kirjainkoolla ei ole merkitystä. REG_NOSUBÄlä ilmoita otteluiden sijaintia. Vaihtoehdot nmatch Ja pmatch varten regexec() ohitetaan, jos annettu puskurimalli on käännetty tämän lipun ollessa käytössä. REG_NEWLINE Sovitusoperaattorit, joilla on jokin merkki, eivät vastaa rivinvaihtomerkkiä.

Luettelo yhteensopimattomista merkeistä ( [^...] ) ilman rivinvaihtomerkkiä ei ole sama kuin rivinvaihtomerkki.

Vertailuoperaattori, joka perustuu merkkijonon alkuun ( ^ ) vastaa tyhjää merkkijonoa välittömästi rivinvaihdon jälkeen riippumatta siitä, mitä liput, suoritusliput regexec(), sisältää REG_NOTBOL.

Rivin lopun vertailuoperaattori ($) sovittaa tyhjän merkkijonon rivin alun merkkiin, riippumatta siitä, mitä liput sisältää REG_NOTEOL.

Vertailu POSIX-säännölliseen lausekkeeseen

Toiminto regexec() käytetään vertaamaan nollapäätteistä merkkijonoa esikäsiteltyyn puskurikuvioon preg. Argumentit nmatch Ja pmatch käytetään antamaan tietoja otteluiden sijainnista. Merkitys liput voi olla bittikohtaista TAI yksi tai molemmat arvot REG_NOTBOL Ja REG_NOTEOL. Nämä arvot määrittävät vertailuprosessin käyttäytymisen alla kuvatulla tavalla. REG_NOTBOL Merkkijonon alussa oleva vertailuoperaattori aina epäonnistuu (mutta katso edellä kuvattu käännöslippu REG_NEWLINE). Tätä lippua voidaan käyttää, kun regexec() merkkijonon erilliset osat lähetetään, eikä tällaisen merkkijonon alkua tässä tapauksessa tule tulkita uuden rivin alkamiseksi. REG_NOTEOL Rivin lopun vertailuoperaattori epäonnistuu aina (mutta katso edellä kuvattu käännöslippu REG_NEWLINE).

Tavusiirrot

Jos REG_NOSUB ei ole asetettu puskurimallipohjaa käännettäessä, on mahdollista saada tietoa osumien sijainnista. Merkitys pmatch on määriteltävä vähintään nmatch elementtejä. Ne täyttyvät regexec() rivien osumien osoitteet. Alkaen alilausekkeen siirtymät i- avoimet sulut, tallennettu pmatch[i]. Koko säännöllisen lausekkeen vastaavuusosoite tallennetaan pmatch(huomaa, että jos haluat palauttaa ottelupoikkeamat N osalausekkeet, merkitys nmatch ei saa olla vähempää N+1). Käyttämättömät rakenneelementit sisältävät arvon -1.

Rakenne regmatch_t, joka on tyyppi pmatch, määritelty kohdassa :

Typedef-rakenne ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t;

Jokainen elementti rm_so, joka ei ole yhtä suuri kuin -1, osoittaa annetun merkkijonon suurimman osamerkkijonon seuraavan osuman aloitussiirtymän. Suhteellinen elementti rm_eo ilmaisee osuman lopun siirtymän, joka on ensimmäinen merkki vastaavan tekstin jälkeen.

POSIX-virheilmoitus

Toiminto regerror käytetään muuntamaan virhekoodit, jotka voidaan vastaanottaa regcomp() Ja regexec(), virheilmoitusriville.

SISÄÄN regerror lähetetty: virhekoodi virhekoodi, puskurikuvio preg, osoitin merkkijonopuskuriin errbuf ja rivipuskurin koko errbuf_size. Funktio palauttaa koon errbuf, jota tarvitaan virheilmoituksen tallentamiseen nollapäätteisenä merkkijonona. Jos errbuf, Ja errbuf_size eivät siis ole nolla errbuf täytetään ensin errbuf_size - 1 virheilmoituksen merkkiä ja päättyy tyhjään tavuun ("\0").

POSIX-mallipuskurin vapauttaminen

Toiminto regfree() vapauttaa puskurimallille varatun muistin preg kokoamisprosessin aikana käyttämällä regcomp().

PALAUTUSARVO

Toiminto regcomp() palauttaa nollan onnistuneen käännöksen yhteydessä tai muuten virhekoodin.

Toiminto regexec() palauttaa nollan ottelussa or REG_NOMATCH, jos otteluita ei olisi.

VIRHEET

Toiminto regcomp() voi palauttaa seuraavat virheet: REG_BADBR Käänteisen linkin operaattorin virheellinen käyttö. REG_BADPAT Mallioperaattorien, kuten ryhmä- tai luettelooperaattorien, virheellinen käyttö. REG_BADRPT Toistooperaattoreiden virheellinen käyttö, kuten "*":n käyttäminen ensimmäisenä merkkinä. REG_EBRACE Parittomat sulut intervallioperaattoreissa. REG_EBRACK Parittomat hakasulkeet luettelolausekkeissa. REG_ECOLLATE Virheellinen lajitteluelementti. REG_ECTYPE Tuntematon merkkiluokan nimi. REG_EEND Mahdollinen virhe. Ei määritelty POSIX.2:ssa. REG_EESCAPE Kenoviiva perässä. REG_EPAREN Parittomat sulut ryhmittelyoperaattoreissa. REG_ERANGE Alueoperaattorin virheellinen käyttö: esimerkiksi alueen loppu näkyy ennen sen alkua. REG_ESIZE Käännetty säännöllinen lauseke vaatii puskurikuvion, joka on suurempi kuin 64 kt. Tätä ei ole määritelty POSIX.2:ssa. REG_ESPACE Säännöllisten lausekkeiden rutiineista on loppunut muisti. REG_EBUREG Virheellinen viittaus osalausekkeeseen.

Hei kaikille, tänään haluan kertoa teille Reg Organizer -ohjelmasta. Tämä on ohjelma, jossa on monia toimintoja, jotka palvelevat täysin Windows-käyttöjärjestelmää. Reg Organizer sopii täydellisesti Windows XP:lle, Vistalle, 7:lle, 8.1:lle ja 10:lle. Tämän ohjelman avulla voit nopeuttaa ja optimoida tietokoneesi käyttöjärjestelmää ja vapauttaa lisäresursseja.

Reg Organizerin avulla voit poistaa ohjelmat kokonaan järjestelmästä sekä siivota kaiken roskan, joka jää jäljelle, kun asennus poistetaan ohjauspaneelin kautta. Ainutlaatuinen käynnistyshallinta auttaa nopeuttamaan järjestelmän suorituskykyä niin paljon kuin mahdollista. Sisäänrakennettu levynpuhdistustoiminto auttaa vapauttamaan entistä enemmän vapaata tilaa tietokoneen levyltä. Reg Organizerin avulla on helppo puhdistaa rekisteri ja optimoida se. Eikä tässä vielä kaikki ohjelman ominaisuudet.

Mitä Reg Organizer voi tehdä?

  • Reg Organizer auttaa sinua poistamaan ohjelman kokonaan ja poistamaan sen jäännökset, mikä estää rekisterin ja tietokoneen levyjen sotkumisen.
  • Käynnistyksen puhdistaminen (autorun) auttaa poistamaan Windowsilla alkavia sovelluksia. Näin voit nopeuttaa Windows-käyttöjärjestelmän lataamista ja vapauttaa joitakin tietokoneesi resursseja. Lisäksi käynnistysosiossa voit myös poistaa ajoitetut tehtävät.
  • Levyjen automaattinen puhdistaminen vapauttaa paljon vapaata tilaa järjestelmälevyllä. Voit poistaa kaiken, mitä Windows ei puhdista itse.
  • Reg Organizerin hienoilla asetuksilla voit mukauttaa Windows-käyttöjärjestelmän toimintaa tarpeidesi mukaan.
  • Rekisterin puhdistus - Reg Organizer löytää ja poistaa itsenäisesti kaikki tarpeettomat ja virheelliset merkinnät Windowsin järjestelmärekisteristä, jotka voivat vaikuttaa toiminnan vakauteen.
  • Reg Organizerin avulla voit optimoida rekisterin, pakata rekisteritiedostoja ja eheyttää sen.
  • Reg Organizerin kätevä rekisterieditori auttaa sinua suorittamaan erilaisia ​​toimintoja järjestelmärekisterin kanssa, mukaan lukien vieminen, tuonti, avainarvojen kopiointi ja paljon muuta.
  • Helppo haku ja avainten vaihtaminen rekisterissä - voit löytää tarvittavat avaimet ja poistaa ne tarvittaessa. Siinä tapauksessa, että sovelluksissa ei ole asennuksen poistoohjelmaa tai sovelluksen "manuaalisen" poistamisen jälkeen rekisteriin jää merkintöjä, jotka voivat aiheuttaa ristiriitoja rekisterissä, tässä tapauksessa Etsi ja korvaa rekisteriavaimet -toiminto on hyödyllinen. Reg Organizer suorittaa syvän haun ja antaa usein mahdollisuuden löytää jopa mitä muut ohjelmat eivät löydä.
  • Reg Organizer voi valvoa kaikkea, mitä ohjelma tekee asennuksen aikana, ja jos ongelmia ilmenee, voit kumota kaiken, mitä ohjelma yritti tehdä asennuksen aikana.
  • Ohjelma löytää jäljellä olevat jäljet ​​jo poistetuista ohjelmista. Jos poistit ohjelman väärin, Reg Organizer auttaa poistamaan poistetun ohjelman jäljet.

Näet lisätietoja kaikista Reg Organizerin ominaisuuksista videossani:


Voit ladata Reg Organizerin viralliselta verkkosivustolta millä tahansa latauspainikkeella.