Preg sa zhoduje s akoukoľvek postavou. Regulárne výrazy (vzory). Príklad kódu: Skonvertuje všetky značky HTML na veľké písmená

  • 03.11.2019
1,6 tis

Regulárne výrazy (skratka - regulárny výraz) sú sekvencie znakov, ktoré tvoria vzory vyhľadávania. Používajú sa hlavne vo vzoroch spájania reťazcov.

Krátky príbeh

  • Všetko sa to začalo v 40. a 60. rokoch 20. storočia, keď veľa šikovných ľudí hovorilo o regulárnych výrazoch;
  • 70. roky 20. storočia g / re / p;
  • 1980 Perl a Henry Spencer;
  • 1997 PCRE (Perl kompatibilné regulárne výrazy). Vtedy sa začalo rozbiehať to, čo nazývame regulárne výrazy. PCRE poskytuje knižnice pre takmer každý jazyk.

Bežné používanie regulárnych výrazov v PHP

PHP obsahuje tri hlavné funkcie pre prácu s PCRE - preg_match, preg_match_all a preg_replace.

Zodpovedajúce porovnanie

Výraz vráti 1, ak bola nájdená zhoda, 0, ak nie, a false, ak sa vyskytne chyba:

int preg_match (reťazec $ vzor, ​​reťazec $ predmet [, pole & $ zhody [, int $ príznaky = 0 [, int $ offset = 0]]])

Príklad regulárneho výrazu, ktorý vráti počet nájdených zhôd:

int preg_match_all (reťazec $ vzor, ​​reťazec $ predmet [, pole & $ zhody [, int $ flags = PREG_PATTERN_ORDER [, int $ offset = 0]]])

Výmena

Výraz vráti nahradený reťazec alebo pole ( na základe predmetu $):

zmiešaná preg_replace (zmiešaný vzor $, zmiešaná náhrada $, zmiešaný predmet $ [, limit int $ = -1 [, počet $ int]])

Bežné používanie regulárnych výrazov v JavaScripte

Regulárne výrazy v JavaScripte vyzerajú takmer rovnako ako v PHP.

Zodpovedajúce porovnanie

Vráti pole zhôd alebo hodnotu null, ak sa nenašli žiadne zhody:

string.match (RegExp);

Výmena

Regulárny výraz, ktorý vracia reťazec s vykonanými náhradami:

string.replace (RegExp, nahradenie);

Vlastnosti regulárnych výrazov v JavaScripte

  • Obdobie sa nikdy nezhoduje s novým riadkom:
  • Rovnaké metódy na porovnávanie a nahradzovanie pomocou regulárneho výrazu ako bez nich.

Zásady písania vzorov regulárnych výrazov

Pozrime sa na príklad, kde chcete nájsť e-mailové adresy vo svojej kódovej základni. Náš cieľ:

Analógové zásuvky

Regulárne výrazy sa skladajú z dvoch typov znakov:

  • Špeciálne symboly: ? * + () () ^ $ /.
  • Doslovy.

Predstavte si vstupné reťazce ako skrutky a šablónu ako sadu konektorov pre ne (v príslušnom poradí).

Špeciálne symboly

Pri overovaní regulárnych výrazov potrebujete vedieť, ako fungujú špeciálne znaky:

  • Znak spätnej lomky \ môže nahradiť iný špeciálny znak v regulárnom výraze:
  • Bodka a w -.

Priraďte všetky znaky okrem nových riadkov. Ak chcete skontrolovať bodku a iba bodku -, písmená, čísla a podčiarkovník - w

  • Hranaté zátvorky .

Zhoduje sa so znakmi v zátvorkách. Podporuje rozsahy. Niektoré príklady:
o - zhoduje sa s ktorýmkoľvek a, b alebo c.
o veľké písmená.
o ľubovoľné číslo.
o - zhoduje sa s akýmikoľvek malými alebo veľkými písmenami abecedy.
Voliteľné? Zhoda 0 alebo 1.
Hviezdička *.

Hviezdička predstavuje 0 alebo viac znakov.

Porovnajte 1 alebo viac znakov.

Kučeravé zátvorky ().

Minimálne a maximálne hodnoty. Niekoľko príkladov syntaxe regulárneho výrazu:
o (1,) aspoň 1.
o (1.3) od 1 do 3.
o (1,64) od 1 do 64.

Pridajme toto všetko, aby sme získali regulárny výraz pre e-mailové adresy:

/[e-mail chránený]+ (. +) * / i


Ako to vyzerá v PHP:

preg_match_all ("/ [e-mail chránený]+ (. +) * / i ", $ vstupné_riadky, $ výstupné_pole);

Použitie regulárneho výrazu na overenie

Výzva: Uistite sa, že vstup je taký, aký očakávame. Cieľ 1: / [^w$. ]/ Cieľ 2: / ^ (1,2) $ /

Regulárne výrazy sú dobré na hľadanie položiek, ale musíte vedieť, čo presne hľadáte.

Kedy by ste na overenie nemali použiť regulárny výraz?

Mnoho prípadov sa lepšie rieši pomocou funkcie filter_var v PHP. Napríklad overenie e-mailu by sa malo vykonávať pomocou vstavaných filtrov PHP:

filter_var (" [e-mail chránený]", FILTER_VALIDATE_EMAIL)

Validácia s regulárnymi výrazmi

Regulárne výrazy na konci riadku používajú kotvy:

^ - označuje začiatok riadku.
$ Je znak dolára, ktorý označuje koniec riadku.

if (! preg_match ("% ^ (1,2) $%", $ _POST ["subscription_frequency"])) ($ isError = true;)

Vylúčené triedy postáv

[^ abc] – všetko okrem a, b alebo c, vrátane nových riadkov.

Príklad, ktorý poskytuje vstup len pre alfanumerické znaky, pomlčky, bodky, podčiarkovníky:

if (preg_match ("/ [^ 0-9a-z -_.] / i", $ productCode)) ($ isError = true;)

Nájsť a nahradiť

Najbežnejšie funkcie PCRE na vyhľadávanie a nahradenie sú preg_replace () a preg_replace_callback (). Existujú však aj preg_filter () a preg_replace_callback_array (), ktoré robia takmer to isté. Všimnite si, že funkcia preg_replace_callback_array () je dostupná od PHP7.

Nahradiť slová v zozname

$ predmet = "Chcem jesť jablká."; echo preg_replace ("/ jablko | banán | pomaranč /", "ovocie", $ predmet);

Výsledok

Chcem jesť nejaké ovocie.

Ak regulárny výraz obsahuje podvzory ( v zátvorkách), môžete nahradiť $ N alebo N (kde N je celé číslo > = 1), nazýva sa to „spätný odkaz“.

Permutácia dvoch čísel

$ predmet = "7/11"; echo preg_replace ("/ (d +) / (d +) /", "$ 2 / $ 1", $ predmet);

Výsledok

Zmeňte formátovanie dátumu

$ predmet = "2001-09-11"; echo preg_replace ("/ (d +) - (d +) - (d +) /", "$ 3 / $ 2 / $ 1", $ predmet);

Výsledok

Jednoduchý príklad nahradenia adresy URL v značke

$ subject = "Ďalšie články nájdete na https://php.earth/doc."; echo preg_replace ("# (https?: // ([^ s. /] + (?:. [^ s. /] +) * [^ s] *)) #i", "$ 2", $ predmet );

Výsledok

PHP regexp je výkonný algoritmus na porovnávanie vzorov, ktorý možno vykonať v jedinom výraze. Regulárne výrazy PHP používajú aritmetické operátory (napríklad +, -, ^) na vytváranie zložitých výrazov.

Na čo sa používajú regulárne výrazy:

  • Regulárne výrazy uľahčujú identifikáciu údajov reťazca volaním jedinej funkcie. To šetrí čas pri vytváraní kódu;
  • Pri overovaní údajov zadaných používateľom, ako je e-mailová adresa, doména lokality, telefónne číslo, IP adresa;
  • Zvýrazňovanie kľúčových slov vo výsledkoch vyhľadávania;
  • Regulárne výrazy možno použiť na identifikáciu značiek a ich nahradenie.

Regulárne výrazy v PHP

PHP obsahuje vstavané funkcie, ktoré umožňujú prácu s regulárnymi výrazmi. Teraz sa pozrime na často používané funkcie regulárneho výrazu PHP.

  • preg_match - Používa sa na vykonanie zhody vzorov na reťazci. Vracia true, ak bola nájdená zhoda, a false, ak nebola nájdená žiadna zhoda;
  • preg_split - používa sa na rozdelenie reťazca podľa vzoru, výsledok sa vráti ako číselné pole;
  • preg_replace - používa sa na porovnávanie vzorov a nahradenie zadaným reťazcom.

Nasleduje syntax pre funkcie regulárneho výrazu, ako je preg_match, preg_split alebo náhrada regulárneho výrazu PHP:

Function_name je buď preg_match, preg_split alebo preg_replace.
"/ ... /" - lomky označujú začiatok a koniec regulárneho výrazu.
"'/ Vzor /" "je vzor, ​​ktorý musíme porovnať.
"Objekt" je reťazec, s ktorým sa má vzor zhodovať.

Teraz sa pozrime na praktické príklady použitia vyššie spomínaných funkcií.

Preg_match

Prvý príklad používa funkciu preg_match na vykonanie jednoduchého porovnávania vzorov so slovom guru v danej adrese URL.

Nižšie uvedený kód ukazuje implementáciu tohto príkladu:


Zvážte časť kódu, ktorá je zodpovedná za výstup "Preg_match (' / guru / ', $ my_url)".

"Preg_match (...)" - funkcia PHP zhoda s regulárnym výrazom.
"'/ Guru /" "je vzor regulárneho výrazu.
$ My_url je premenná obsahujúca text, s ktorým sa má vzor zhodovať.

Preg_split

Pozrime sa na ďalší príklad, ktorý používa funkciu preg_split.

Vezmeme frázu a rozdelíme ju do poľa; vzor je určený na vyhľadávanie jedného priestoru:

Preg_replace

Zvážte funkciu preg_replace, ktorá vykonáva zhodu so vzorom a nahrádza nájdený výsledok iným reťazcom.

Nižšie uvedený kód hľadá v reťazci slovo guru. Nahrádza ho kódom css, ktorý nastavuje farbu pozadia:

Guru", $ text); echo $ text;?>

Metaznaky

Vo vyššie uvedených príkladoch boli použité jednoduché šablóny. Metaznaky umožňujú zložitejšie porovnávanie vzorov regulárnych výrazov PHP, ako je napríklad overenie e-mailovej adresy. Poďme sa pozrieť na bežne používané metaznaky.

Metaznak Popis Príklad
. Označuje akýkoľvek jeden znak iný ako znak nového riadku. /./ - čokoľvek, čo obsahuje jeden znak.
^ Označuje začiatok riadku bez znaku /. / ^ PH / - každý riadok, ktorý začína na PH.
$ Označuje vzor na konci riadku. / com $ / - guru99.com, yahoo.com atď.
* Označuje ľubovoľný počet znakov, nula alebo viac. / com * / - počítač, komunikácia atď.
+ Vyžaduje, aby sa znak (y) objavil pred metaznakom aspoň raz. / yah + oo / - yahoo.
Unikajúca postava. /yahoo+.com/ - Bodku berie ako doslovný význam.
[…] Trieda postavy. // - abc.
a-z Označuje malé písmená. / a-z / - v pohode, veselý atď.
A-Z Označuje veľké písmená. / A-Z / - ČO, AKO, PREČO atď.
0-9 Označuje ľubovoľné číslice od 0 do 9. /0-4/ — 0,1,2,3,4.

Teraz sa pozrime na komplexný príklad regulárneho výrazu PHP, ktorý kontroluje platnosť e-mailovej adresy:

Výsledok: e-mailová adresa [e-mail chránený] je platné.

Vysvetlenie šablóny " [e-mail chránený]+. (2,5) $ /] "

„‘ / ... / „“ začína a končí regulárny výraz.
„^“ Zhoduje sa so všetkými malými alebo veľkými písmenami, číslami 0 až 9 a bodkami, podčiarkovníkmi alebo pomlčkami.
« [e-mail chránený]»Zhoduje sa so symbolom @, za ktorým nasledujú malé alebo veľké písmená, čísla 0 až 9 alebo spojovníky.
„+. (2,5) $ /“ označuje bodku pomocou spätnej lomky, potom musia nasledovať všetky veľké alebo malé písmená, počet znakov na konci riadku musí byť medzi 2 a 5.


Jednou z veľmi výkonných a užitočných funkcií jazyka PHP je podpora regulárnych výrazov. Mnoho programátorov, začiatočníkov aj pomerne skúsených, je vystrašených vonkajšou zložitosťou a zmätenosťou jazyka regulárnych výrazov. Ale môžem vás ubezpečiť - stojí to za to. Používanie regulárnych výrazov výrazne uľahčuje prácu pri spracovaní textu a zle štruktúrovaných údajov.


Regulárne výrazy sú výrazy napísané v špeciálnom jazyku. Nezľaknite sa, jazyk je dostatočne jednoduchý na pochopenie, sú potrebné len skúsenosti a prax.


Myslím, že ste sa opakovane stretli so situáciami, keď máte text (napríklad v programe Microsoft Word) a potrebujete v ňom nájsť niečo dôležité. Ak viete, čo presne hľadáte, všetko je jednoduché: vyvolali dialógové okno vyhľadávania, zadali požadované slovo, stlačili tlačidlo a voila - text sa našiel.


Čo však robiť, ak vopred poznáte len typ informácií, ktoré hľadáte? Vašou úlohou je napríklad nájsť všetky e-mailové adresy v niekoľkých stovkách listov dokumentu. Niektorí budú listovať v dokumente manuálne, niektorí budú hľadať psa (@) a hľadať ho. Súhlasím - oba varianty sú tvrdá práca, nevďačná práca.

Tu prichádzajú na pomoc regulárne výrazy. V určitej aproximácii možno regulárne výrazy porovnať s maskami alebo vzormi, ktoré sú prekryté textom: ak sa text zhoduje s maskou, potom je to požadovaný fragment. Predtým, ako sa však pozrieme na použitie regulárnych výrazov, pozrime sa na ich syntax.

Regulárny výraz je textový reťazec zložený podľa určitých zákonov a pravidiel. Reťazec pozostáva zo znakov a skupín znakov, metaznakov, kvantifikátorov a modifikátorov.

V tomto prípade sú symboly akékoľvek symboly akejkoľvek abecedy. A nielen tie čitateľné. Do výrazu môžete jednoducho vložiť nečitateľný znak, na to vám stačí poznať jeho kód v hexadecimálnom tvare. Napríklad:

// čitateľné znaky a Е // nečitateľné znaky a kódy \ x41 - to isté ako písmeno "A" \ x09 - tabuľkový znak

Skupina znakov je séria znakov napísaných v poradí:

Abvg ACZms

Hneď dávam do pozornosti - za významný znak sa považuje aj "medzera" v regulárnych výrazoch, takže pri písaní výrazov buďte opatrní. Napríklad tieto znaky grappa sú RÔZNE výrazy:

ABVGDE ABC KDE

Ďalším jazykovým prvkom sú metaznaky. Predpona „meta“ znamená, že tieto symboly opisujú niektoré ďalšie symboly alebo ich skupiny. V tabuľke sú uvedené hlavné metaznaky jazyka regulárnych výrazov:

Metaznaky na špecifikovanie špeciálnych znakov
() Zátvorky. Definujte vnorené výrazy.
| Výberový metaznak
^ Začiatok riadku metaznak
$ Metaznak konca riadku
\ n Riadkový znak (hex 0x0A)
\ r Vrátenie vozíka (hex 0x0D)
\ t Znak tabulátora (hexadecimálne 0x09)
\ xhh Vložte znak s hexadecimálnym kódom 0xhh, napríklad \ x42 vloží latinské písmeno "B"
Metaznaky na špecifikovanie skupín znakov
. Bod. Akýkoľvek charakter.
\ d Číslice (0-9)
\ D Nie je to číslica (akýkoľvek znak okrem znakov 0-9)
\ s Prázdny znak (zvyčajne medzera a znak tabulátora)
\ S Neprázdny znak (všetko okrem znakov definovaných metaznakom \ s)
\ w Znak zo „slovníka“ (znak, ktorý sa používa v slovách. Zvyčajne všetky písmená, všetky čísla a podčiarkovník („_“))
\ W Všetko okrem znakov určených metaznakom \ w

Metaznaky z druhej polovice tabuľky sú veľmi ľahko zapamätateľné. "d" je číslica (číslica), "s" je symbol (symbol), "w" je slovo (slovo). Ak je písmeno veľké, musíte do popisu skupiny pridať „NIE“.

Vezmime si napríklad text „Červený dres má čísla 1812 a zelený dres je 2009“. Pozrime sa na príklady najjednoduchších regulárnych výrazov:

\ d \ d \ d \ d - nájde 1812 a 2009 \ D - nájde všetky písmená, medzery a interpunkčné znamienka \ s - nájde všetky medzery v texte.

Ale koniec koncov, rok v našom príklade možno písať nie štyrmi, ale dvoma číslami, slová môžu mať iné skloňovanie atď. Tu môžu pomôcť podmnožiny znakov, ktoré sú špecifikované pomocou hranatých zátvoriek:

Znamená ľubovoľnú číslicu (rovnako ako \ d) - znamená párnu číslicu - označuje akýkoľvek znak latinskej abecedy (v každom prípade) alebo číslicu.

Napríklad výraz \ d \ d \ d v testovacom riadku nájde iba 1812, ale nie 2009. Tento výraz by sa mal čítať ako „nájdi všetky štvorciferné sekvencie, kde posledná číslica je 0,2,4,6 alebo 8".

Musíme spomenúť len kvantifikátory a modifikátory.

Kvantifikátor je špeciálna konštrukcia, ktorá určuje, koľkokrát sa má postava alebo skupina postáv objaviť. Kvantifikátor je uzavretý v zložených zátvorkách "()". Existujú dva formáty záznamu: presný a rozsah. Presné formát je napísaný takto:

X je počet, koľkokrát sa musí predchádzajúci znak alebo skupina zopakovať. Napríklad výraz

Druhou formou zápisu je rozsah. Napísané ako

(X, Y) // alebo (, Y) // alebo (X,)

kde X je minimum a Y je maximálny počet opakovaní. Napríklad:

znie ako „dve až štyri po sebe idúce číslice“. Ak jedna z hraníc nie je špecifikovaná, znamená to absenciu obmedzenia. Napríklad:

\ w (3,) - tri alebo viac písmen. \ d (, 5) - neexistujú žiadne číslice alebo sú tam číslice, ale nie viac ako päť.

Kvantifikátory možno použiť buď na jeden znak, alebo na skupinu:

[A-Ya-me] (1,3)

Táto konštrukcia vyberie z textu všetky ruské slová s jedným, dvoma alebo tromi písmenami (napríklad "alebo", "nie", "ja", "idem" atď.)

Okrem zložených zátvoriek s, existujú tri ďalšie metaznaky-kvantifikátory: "*" (hviezdička), "+" (plus) a "?" (otázka). Používajú sa v prípadoch, keď nie je vopred známy minimálny a maximálny počet požadovaných opakovaní. Napríklad pri vyhľadávaní e-mailových adries nemôžete vopred určiť, koľko znakov bude v používateľskom mene (pred „pes“) a koľko v názve domény (po „pes“).

Metaznak "*" sa číta ako "akékoľvek číslo od nuly alebo viac", t.j. dizajn

definuje ľubovoľný počet po sebe nasledujúcich písmen vrátane ich úplnej absencie.

Symbol „+“ sa od hviezdičky líši len tým, že vyžaduje aspoň jeden symbol. Tie. dizajn

zhoduje sa s akoukoľvek číselnou sekvenciou, kde je jedna alebo viac číslic.

Symbol "?" zodpovedá absencii alebo prítomnosti jedného znaku. Tie. dizajn

zhoduje sa s akoukoľvek číselnou sekvenciou, kde je jedna alebo dve číslice.

Tu stojí za zmienku taká vlastnosť antifierov "*" a "+" ako chamtivosť... Pointa je, že štandardne sa tieto znaky zhodujú s najdlhším možným sledom znakov. Napríklad pre riadok „Mama umývala rám“ výraz:

vyberie "mama soap ra", čo je trochu nečakané, pretože sme mali dostať "ma". Ak chcete zmeniť toto správanie, použite znak "?" (otáznik), napísaný bezprostredne za kvantifikátorom. Dusí apetít kvantifikátorov tým, že ich núti vrátiť prvý zápas, nie ten najdlhší. Teraz zmeníme predchádzajúci príklad:

a dostaneme požadovanú zhodu "ma".

Posledným prvkom jazyka je modifikátory... Modifikátor je špeciálny znak, ktorý definuje "systémové" parametre analýzy regulárneho výrazu. Existujú iba štyri takéto symboly, možno ich použiť jednotlivo aj súčasne:

i Zapne režim bez rozlišovania malých a veľkých písmen, t.j. veľké a malé písmená sa vo výraze nelíšia.
m Označuje, že vyhľadávaný text by sa mal považovať za viacero riadkov. V predvolenom nastavení modul regulárneho výrazu zaobchádza s textom ako s jedným reťazcom bez ohľadu na to, aký v skutočnosti je. Preto metaznaky "^" a "$" označujú začiatok a koniec celého textu. Ak je zadaný tento modifikátor, budú ukazovať na začiatok a koniec každého riadku textu.
s Predvolený metaznak je "." nezahŕňa vo svojej definícii znak pre posun riadkov. Tie. pre viacriadkový text vráti výraz /.+/ iba prvý riadok, nie celý text, ako sa očakávalo. Zadaním tohto modifikátora sa toto obmedzenie odstráni.
U V predvolenom nastavení sú všetky metaznaky nenásytné. V niektorých modifikáciách jazyka (najmä v PHP) sa namiesto "U" používa symbol "g", ktorý je pre tento význam vhodnejší ("g" je skratka pre anglické "greedy", "greedy" ).

V tabuľke sú uvedené najpopulárnejšie a najužitočnejšie príklady regulárnych výrazov. Niektoré sa vám môžu zdať komplikované a ťažkopádne, no pri podrobnom štúdiu na to nepochybne prídete.

Regulárne výrazy v PHP.

Na prácu s regulárnymi výrazmi v PHP existujú špeciálne funkcie, ktorých zoznam a stručný popis sú uvedené v tabuľke:

int preg_match (vzor reťazca, predmet reťazca [, zhody poľa])

Funkcia kontroluje, či sa obsah predmetu zhoduje so vzorom. Ak sa nájdu zhody, vráti 1, v opačnom prípade vráti 0. Ak zadáte voliteľný parameter poľa, zhody, po vykonaní funkcie sa k nej pridá jeden prvok – prvá nájdená zhoda.

"; print_r ($ nájdené);?>

int preg_match_all (vzor reťazca, predmet reťazca, zhody poľa [, int order])
Funkcia je totožná s predchádzajúcou, len s tým rozdielom – prehľadá celý text a vráti VŠETKY nájdené zhody v poli matchs.
zmiešaná preg_replace (zmiešaný vzor, ​​zmiešaná náhrada, zmiešaný predmet [, int limit])
Rovnako ako obe predchádzajúce funkcie, aj preg_replace hľadá časť textu, ktorá sa zhoduje so vzorom. Funkcia nahradí všetky nájdené fragmenty textom špecifikovaným v parametroch.Pred čistením:\ n $ text \ n \ n "; $ text = preg_replace (" / (\ n \ s (2,)) / "," ", $ text); echo" Po vyčistení:\ n $ text "; // zobrazí text zbavený špeciálnych znakov // a medzier navyše?>
zmiešané preg_replace_callback (zmiešaný vzor, ​​zmiešané spätné volanie, zmiešaný predmet [, int limit])
Funkcia je rozšírenou verziou predchádzajúcej. Hlavný rozdiel je v tom, že názov funkcie, ktorá bude analyzovať text a vytvárať alternatívny text, je odovzdaný tejto funkcii v parametroch.
pole preg_split (vzor reťazca, predmet reťazca [, limit int [, príznaky int]])
Táto funkcia je podobná funkciám rozložiť () a rozdeliť (). Jeho zvláštnosťou je, že oddeľovač nie je pevný reťazec, ale regulárny výraz. Funkcia rozdelí pôvodné údaje na prvky a umiestni ich do výstupného poľa.
pole preg_grep (vzor reťazca, vstup poľa)
Funkcia je určená na bežné vyhľadávanie v poliach. Pre vyhľadávanie sa zadá šablóna a pole vstupných údajov a vráti sa pole pozostávajúce iba z prvkov, ktoré zodpovedajú šablóne.

Uvedený zoznam funkcií nie je ani zďaleka úplný, no na úspešné začatie práce s regulárnymi výrazmi úplne postačuje. Ak vás táto téma zaujíma, určite si prečítajte doplnkovú literatúru (napríklad Friedlovu knihu „Regulárne výrazy“). Okrem toho pre účely školenia odporúčam nainštalovať niektorý zo špeciálnych programov na testovanie regulárnych výrazov (napríklad „PCRE“ alebo „RegEx Builder“).

zmiešané preg_match(vzor reťazca, predmet reťazca [, pole a zhody [, príznaky int [, posun int]]])

Vyhľadá predmet v danom texte podľa vzoru

Ak je zadaný voliteľný parameter zhody, vyplní sa výsledkami vyhľadávania. Element $ match bude obsahovať časť reťazca, ktorá sa zhoduje s celým vzorom, $ sa zhoduje s časťou reťazca, ktorá sa zhoduje s prvým podvzorom atď.

príznaky môžu nadobúdať nasledujúce hodnoty:

PREG_OFFSET_CAPTURE

Ak je zadaný tento príznak, pre každý nájdený podreťazec bude označená jeho pozícia v pôvodnom reťazci. Malo by sa pamätať na to, že tento príznak mení formát vrátených údajov: každý výskyt sa vráti ako pole, ktorého nulový prvok obsahuje nájdený podreťazec a prvý obsahuje posun. Tento príznak je dostupný v PHP 4.3.0 a vyšších.

Dodatočný parameter flags je dostupný od PHP 4.3.0.

Vyhľadávanie sa vykonáva zľava doprava, od začiatku riadku. Voliteľný parameter offset možno použiť na určenie alternatívnej počiatočnej pozície pre vyhľadávanie. Voliteľný parameter offset je dostupný od PHP 4.3.3.

komentár: Použitie parametra offset nie je ekvivalentné nahradeniu zhodného reťazca substr ($ predmet, $ offset) vo volaní funkcie preg_match_all () keďže vzor môže obsahovať podmienky ako napr ^ , $ alebo (? ... Porovnaj:

Zatiaľ čo tento príklad

Funkcia preg_match () vráti počet nájdených zhôd. Môže to byť 0 (nenájdená žiadna zhoda) a 1, pretože preg_match () skončí po prvej nájdenej zhode. Ak potrebujete nájsť alebo spočítať všetky zhody, mali by ste použiť funkciu preg_match_all ()... Funkcia preg_match () sa vracia FALSE v prípade, že sa počas vykonávania vyskytli nejaké chyby.

Výzva: Funkciu nepoužívajte preg_match () ak je potrebné skontrolovať prítomnosť podreťazca v danom reťazci. Použite na to strpos () alebo strstr () pretože túto úlohu dokončia oveľa rýchlejšie.


Príklad 2. Hľadanie slova „web“ v texte

/*
Špeciálna postupnosť \ b vo vzore označuje hranicu slova,
preto sa bude zhodovať iba ojedinelý výskyt slova „web“.
maska, na rozdiel od „pavučiny“ alebo „pavučiny“.
*/
if (preg_match ("/ \ bweb \ b / i", "PHP je preferovaný webový skriptovací jazyk.")) {
ozvena "Záznam sa našiel.";
) inak (
ozvena "Nenašiel sa žiadny záznam.";
) preg_match ("/ \ bweb \ b / i", "PHP je zvolený skriptovací jazyk webových stránok.")) {
ozvena "Záznam sa našiel.";
) inak (
ozvena "Nenašiel sa žiadny záznam.";
}
?>