Regulární výrazy v PHP (Perl-compatible)
Tato stránka obsahuje stručný referenční přehled funkcí, které využívají Perl-compatible regulárními výrazy.
Poznámka: Popis jednotlivých funkcí je oproti oficiální (anglické) dokumentaci PHP zestručněn a zjednodušen; některé nepovinné parametry jsou v popisu vynechány.
Řetězec obsahující regulární výraz v PHP
V PHP (při použití PHP Perl-compatible funkcí) je samotný regulární výraz uzavřen z obou stran do tzv. oddělovačů (delimiters). Nejběžněji se jako oddělovač používá znak / (lomitko). Za uzavíracím (pravým) oddělovačem mohou nepovinně následovat modifikátory.
Pokud náš regulární výraz bude řetězec abc, potom celý řetězec, který bude argumentem funkce, bude /abc/. Pokud použijeme řetězec /abc/i, nastavíme kromě toho modifikátor i (tedy nerozlišování malých a velkých písmen - ignore case). Musíme dát ovšem pozor v případě, že chceme v samotném regulárním výrazu použít znak, který používáme jako oddělovač (tedy například /). V tom případě musíme znak / escapovat a zapsat tedy \/.
preg_match()
int preg_match(string pattern, string subject [, array &matches])
Funkce najde první shodu regulárního výrazu pattern s řetězcem subject. Pokud je funkci předána reference na pole matches, jsou do tohoto pole uloženy části řetězce subject, které odpovídají jednotlivým subvýrazům regulárního výrazu pattern. Pod indexem 0 je v poli matches uložena shoda s celým regulárním výrazem. V dalších prvcích pole (1, 2, 3 ,...) jsou uloženy řetězce odpovídající jednotlivým subvýrazům (samozřejme jen pokud regulární výraz má subvýrazy).
Funkce vrací 0 pokud nebyla nalezena shoda, 1 pokud shoda byla nalezena. Pokud při zpracovávání funkce došlo k chybě (například vinou neplatného regulárního výrazu), funkce vrací FALSE.
Tuto funkci bychom mohli použít například pro ověření platnosti e-mailové adresy.
Pokud chceme najít všechny shody regulárního výrazu s řetězcem, musíme použít funkci preg_match_all().
preg_match_all()
int preg_match_all(string pattern, string subject, array &matches)
Funkce najde shody regulárního výrazu pattern s řetězcem subject. Do pole matches, jsou do tohoto pole uloženy části řetězce subject, které odpovídají jednotlivým subvýrazům regulárního výrazu pattern a to pro každou shodu. Vzniká tak dvourozměrné pole, kde indexem první úrovně je číslo subvýrazu a indexem druhé úrovně je číslo označující o kolikátou shodu se jedná. Pod indexem 0 jsou v poli matches uloženy shody s celým regulárním výrazem (tedy pole shod). V dalších prvcích pole (1, 2, 3 ,...) jsou uložena pole shod odpovídající jednotlivým subvýrazům (samozřejme jen pokud regulární výraz má subvýrazy). Chování funkce je možno konfigurovat pomocí dalších parametrů – detailnější popis funkce viz PHP manuál.
Funkce vrací 0 pokud nebyla nalezena shoda. Pokud shoda byla nalezena, vrací číslo odpovídající počtu shod. Pokud při zpracovávání funkce došlo k chybě (například vinou neplatného regulárního výrazu), funkce vrací FALSE.
Tuto funkci bychom mohli použít například pro vyhledání všech e-mailových adres v nějakém textu (třeba i HTML stránce).
preg_replace()
mixed preg_replace(mixed pattern, mixed replacement, mixed subject)
Funkce hledá shodu regulárního výrazu pattern s řetězcem subject. Pokud je shoda nalezena, část řetězce subject odpovídající regulárnímu výrazu pattern je nahrazena řetězcem replacement.
Argument pattern může být řetězec či pole (pole regulárních výrazů, které se použijí postupně při porovnání). Argument subject může být řetězec či pole (pole řetězců v nichž se má provést náhrada).
Pokud došlo ke shodě, funkce vrací změněný řetězec (nebo pole řetězců, pokud je argumentem subject pole). Pokud ke shodě nedošlo, vrací funkce původní řetězec či pole subject.
Tuto funkci bychom mohli použít například pro hromadnou náhradu určitých HTML tagů.
preg_split()
array preg_split(string pattern, string subject)
Funkce rozdělí řetězec subject na části. Funkce vrátí pole těchto částí. Za oddělovač jednotlivých částí se použije ta část řetězce subject (resp. části), která odpovídá regulárnímu výrazu pattern.
Tuto funkci bychom mohli použít například, pokud máme text v němž používáme několik druhů oddělovačů a my přesto chceme jedním voláním funkce získat data oddělená oddělovači a uložit je do pole.
preg_grep()
Funkce načte pole řetězců a vratí nové pole obsahující pouze ty řetězce, které odpovídají regulárnímu výrazu.
Tuto funkci bychom mohli použít například k vyhledání příliš krátkých uživatelských hesel v nějaké databázi uživatelů.
Bližší popis naleznete v 9. dílu seriálu Regulární výrazy v PHP (Perl-compatible).
preg_replace_callback()
Funkce provádí náhradu řetězců odpovídajících regulárnímu výrazu podobně jako funkce preg_replace(). U preg_replace_callback() je však jako náhrada (replacement) použita návratová hodnota uživatelsky definované funkce, které je na vstupu předán řetězec odpovídající regulárnímu výrazu.
Bližší popis naleznete v 9. dílu seriálu Regulární výrazy v PHP (Perl-compatible).
preg_quote()
Tato pomocná funkce upraví zadaný řetězec tak, že escapuje metaznaky a oddělovač regulárního výrazu.
Tuto funkci použijeme pokud potřebuje tzv. za běhu (tj. pomocí skriptu) vytvořit regulární výraz a nemůžeme tak metaznaky ošetřit ručně.
Bližší popis naleznete v 9. dílu seriálu Regulární výrazy v PHP (Perl-compatible).
Závěrem
Detailnější popis práce s Perl-compatible regulárními výrazy najdete v seriálu Regulární výrazy v PHP (Perl-compatible) nebo v oficiálním PHP manuálu.