Regulární výrazy v PHP: Regexpové funkce vs. Textové funkce
Vědět, kdy použít regulární výraz a kdy textovou funkci, je velmi důležité. Regulární výrazy jsou sice pěkná věc, ale musí se vědět, jak je používat správně :) Proto se podíváme na textové funkce podobné regexpovým funkcím, které jsme doposud používali.
Seriál Regulární výrazy v PHP
- Regulární výrazy v PHP: Řetězce
- Regulární výrazy v PHP: Funkce
- Regulární výrazy v PHP: Funkce (2)
- Regulární výrazy v PHP: Regexpové funkce vs. Textové funkce
Úvod
Tento díl jsem začlenil do seriálu o regulárních výrazech proto, že používání regexpu tam, kde úplně klidně postačí obyčejná funkce pracující s textem, je úplně zbytečné a pomalé. Regulární výrazy jsou sice pěkná věc, ale musí se vědět, jak je používat správně :) Popsat všechny textové funkce by bylo na samostatný seriál, a tak popíšu alespoň ty důležité a podobné těm regexpovým. Na ostatní alespoň odkážu :)
Kdy co použít?
Abych to uvedl na pravou míru, v textových funkcích nemůžeme použít metaznaky, pouze normální text. Ovšem používání textových funkcí je daleko rychlejší. Obecně platí: Nepoužívat regulární výraz tam, kde můžu použít normalní textovou funkci. Toto budeme dnes dodržovat :)
Bratříček Eregu (StrPos)
Funkce Ereg má hned několik sobě podobných textových funkcí. Jsou to StrStr, StrChr, StrIStr, StrRChratd. Někteří lidé používají k pouhému porovnání řetězců StrStr. Pokud však potřebujete pouze zjistit, zda se výraz v textu vyskytuje, je efektivnější (rychlejší) použít StrPos. Za zmínku stojí i to, že funkce StrChr je stejná jako StrStr. Nenechte se tedy plést jejím významem v C.
StrPos (je v PHP od verze 3) vrací false, pokud hledaný text v řetězci není. Pokud je, vrací pozici hledaného textu. Problém je v tom, že znaky jsou číslovány od 0 ( = false). V následujícím skriptu si ukážeme funkci a tento problém vyřešíme použitím operátoru ===.
<?
###########################
# Funkce StrPos - ROOT.cz #
###########################
# hledame $retezec
$text = 'abcd';
$pozice = StrPos($text, $retezec);
echo "<html>\n<body>";
if ($pozice === false) /* vsimnete si operatoru === */
{
echo '$retezec'."($retezec) se nevyskytuje v ".'$textu'."($text)";
}
else
{
echo '$retezec'."($retezec) se vyskytuje v ".'$textu'."($text) na pozici $pozice";
}
echo "</body>\n</html>";
?>
Bratříček Ereg_Replacu (Str_Replace)
Funkce je v PHP od release verze 3.0.6 a je to textový protějšek Ereg_Replace nebo perlovského Preg_Replace. Funkce najde retezec v textu a ten nahradí novým_řetězcem. Syntaxe je Str_Replace(retezec, novy_retezec, text). Tradičně si vše ukážeme na krásném příkladu aneb zvolte si svou oblíbenou barvu :)
<?
###############################
# Funkce StrReplace - ROOT.cz #
###############################
# pouzivame $oblibena_barva
$text = 'My favourite colour\'s blue';
$text2 = Str_Replace("blue", $oblibena_barva, $text);
echo "<html>\n<body>";
echo $text2;
echo "</body>\n</html>";
?>
Od PHP 4.0.5 je možno použít pole ve všech parametrech. Do PHP 4.3.3 oxidoval ve funkci jeden menší bug (info zde). Je v plánu, že od PHP 5 bude přidám další parametr count, který bude udávat počet záměn. Pokud byste potřebovali nahradit text pouze v určité části řetězce, prozkoumejte, jak funguje funkce SubStr_Replace.
Příbuzní Splitu :)
Funkci Split (popř. SplitI), kterou jsme se zabývali minule, se až moc podobá funkce Explode (tou jsme se zabývali v minulém dílu) a StrTok, který by se dal označit za vzdálenějšího příbuzného (třeba tetku z 2nd kolene :))
Příště… :)
Příští díl bude poslední. Proto se podíváme na praktické příklady, kde regulární výrazy v PHP použít. Budou to trochu složitější kejkle než ty příklady, kterými jsme se dosud zabývali :)
Linky
Následující linky vedou k PHP manuálu
Linky z části o Eregu
StrPos
StrStr
StrChr
StrIStr
StrRChr
Linky z části o Ereg_Replace
Linky z části o Splitu
Explode (minulý díl seriálu)
Explode (manuál)
StrTok
Soubory
Školení: Hackujeme operační systém Android

Školení vám ukáže, jak se dostat k Linuxu (tzv. "rootování"), který se pod hezkou tváří Androida skrývá a jak ho naplno využít. Pomůže vám to při záloze dat, zvětšování prostoru pro aplikace nebo sdílení připojení k internetu a pokud chcete z telefonu dostat opravdové maximum, ukážeme vám, jak v něm vyměnit kompletní systém za lepší.
Podrobnější informace a přihláška
Seriál Regulární výrazy v PHP
- Regulární výrazy v PHP: Řetězce
- Regulární výrazy v PHP: Funkce
- Regulární výrazy v PHP: Funkce (2)
- Regulární výrazy v PHP: Regexpové funkce vs. Textové funkce
Přehled názorů
Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.






