Prvním a opticky nejpodstatnějším rozdílem oproti standardu POSIX je potřeba uzavřít celý výraz mezi oddělovače. Oddělovačem může být libovolný znak vyjma alfanumerických znaků, bílých znaků a zpětného lomítka. Často se používají znaky jako '/', '#', '~', apod. Místo 'výraz' budeme tedy psát '#výraz#', '/výraz/' nebo třeba '%výraz%'. Znak oddělovače nesmí být použit uvnitř výrazu. Pokud bychom ho přesto potřebovali do výrazu zařadit, musíme před něj přidat znak zpětného lomítka.
Metaznak | Znamená | Výraz: | Vyhoví | Nevyhoví |
---|---|---|---|---|
^ |
Začátek řetězce |
^Petr | Petr je borec Petr není borec |
Borec je Petr Franta a Petr jsou borci |
$ |
Konec řetězce |
PC$ |
Mám PC Pracuji na PC |
Moje PC je rozbité PC má dnes každý |
\b |
Hranice slova |
^a\b.+\bz$ |
a bbb z a z |
s bbb z |
. |
Libovolný znak |
s.x |
sex six |
tix sad |
* |
Výraz před tímto metaznakem může mít libovolný počet opakování (i nulakrát) |
s*t |
prst půst prut |
prase |
+ |
Výraz před tímto metaznakem se musí vyskytnout alespoň 1x |
s+t |
prst srst |
prut |
? |
Výraz před tímto metaznakem se může opakovat 0x nejvýše 1x | s?t |
prejt prst |
síť psst |
[] |
Libovolný znak ze znaků v závorce |
[0123456789] |
12 356 8 kusů |
kusy kila litry |
() |
Všechny znaky ze znaků v závorce |
(obec) |
obecný obecní všeobecný |
věcný jablečný všeobjímající |
| |
Rozdělení na podvýrazy |
Astronaut|Babička |
Astronaut Babička |
edém čistě |
\ |
Následující metaznak bude chápán
jako znak |
\+ |
Vše, co obsahuje "+" |
Co neobsahuje "+" |
{n} |
Právě nkrát |
ab{4}c |
abbbbc |
abbc |
{m,n} |
Minimálně mkrát, maximálně nkrát | ab{2,4}c |
abbbbc abbc |
abc abbbbbbc |
{m,} |
Minimálně mkrát | ab{2,}c |
abbbbc abbc |
abc abxc |
Zkratka | Ekvivalentní zápis |
Popis | Příklad |
---|---|---|---|
\d | [0-9] | číslice desítkové soustavy | a\db odpovídá a2b, ale ne axb |
\D | [^0-9] | cokoli kromě číslic desítkové soustavy | a\Db odpovídá axb, ale ne a2b |
\w |
[0-9a-zA-Z_] | odpovídá alfanumerickému znaku a podtržitku |
\w odpovídá 1, a, A, _ , ale ne $, + |
\W | [^0-9a-zA-Z_] | odpovídá nealfanumerickému znaku nebo podtržítku |
\W odpovídá $, !, ?, % , ale ne 2, b |
\s |
[ \n\r\t\f] |
odpovídá bílému znaku (\n, \r, \t, mezera aj.) |
a\sb odpovídá a b, ale ne ab |
\S | [^ \n\r\t\f] | odpovídá jinému než bílému znaku | a\Sb odpovídá a+b, ale ne a b |
\h | [ ] | horizontální bílé znaky (např. mezera, tabulátor) | a\hb odpovídá a b, ale ne a+b |
\H | [^ ] | vše kromě horizontálních bílých znaků | a\Hb odpovídá a*b, ale ne a b |
Zkratka | Význam |
---|---|
\n | zalomení řádku |
\t | tabulátor |
\e | znak escape |
\r | návrat vozíku |
\f | zalomení stránky |
modifikátor | význam |
---|---|
i | při vyhodnocování se nebude rozlišovat mezi malými a velkými písmeny |
x | bílé znaky a komentáře (znaky vpravo od #) jsou ignorovány |
$retezec="5 raket";
$vyraz= '/\d+/'; // \d číslice desítkové soustavy
if (preg_match($vyraz, $retezec))
echo $retezec."-pravda";
else echo $retezec."-nepravda";
$retezec="54 raket"; $vyraz= '/(13|26|54) raket/'; preg_match($vyraz, $retezec,$pole); print_r($pole);
$retezec="13raket 10raket 33raket 54raket"; $vyraz= '/(33|13|54)raket/'; $pocet= preg_match_all($vyraz,$retezec,$pole); echo $pocet." "; print_r($pole) ;
$retezec="ahoj lidi Ahoj všici"; $nahrada ="Čau"; $vyraz= '/[aA]hoj/' ; $novyretezec= preg_replace($vyraz,$nahrada,$retezec); echo $novyretezec;
function nahrada($text){ print( "$text[0]<br>") ; return ; } $vyraz = '/([Rr]eg)+[^ .]+/'; $retezec = 'Regulérní použití regulárních výrazů pro registraci regimentu.'; preg_replace_callback($vyraz, "nahrada", $retezec);Ještě jeden příklad na zaokrouhlování:
function zaokrouhli($cislo) { $cislo=$cislo[0]; if(preg_match("@[5-9]$@",$cislo) ) $cislo= $cislo+10; $result= preg_replace("@[0-9]$@","0",$cislo) ; return $result; }; $vyraz="/\d{2}/"; $function_name="zaokrouhli"; //název uživatelské funkce $retezec="12, 91, 45, 29, 30, 01"; echo preg_replace_callback($vyraz,$function_name,$retezec);
$retezec = 'Kdo tam je?'; $slovo = preg_split('/[ ]+/', $retezec); echo $slovo[0]; echo "<br>"; // 'Kdo' echo $slovo[1]; echo "<br>"; // 'tam' echo $slovo[2]; // 'je?'
$pole=["h12","45","51","hjg","gfgfgf","123"] ; $pole1 = preg_grep("/^(\d+)/", $pole); foreach( $pole1 as $tisk ) echo $tisk."<br>"; print_r($pole1);
Podrobný popis je např. zde