Ú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