Už zase začínám :)
Odpoveď na otázku z minula: druhý skript minulého dílu funguje nepřesně v tom, že např. u domény hlava.com.es přiřadí com k doméně druhého řádu a ne ke koncovce.
SQL_Regcase
Funkce SQL_Regcasevytváří regulární výraz z textu, který mu zadáme. Vrácený regulární výraz ignoruje velikost písmen. Funkce se používá při práci s SQL servery, které nezvládají hledaní nezávislé na velikosti písmen (case insensitive).
V Praxi to znamená, že výsledkem volání SQL_Regcase(„ROOT tecka cz“) bude [Rr][Oo][Oo][Tt] [Tt][Ee][Cc][Kk][Aa] [Cc][Zz]
<?
# Funkce SQL_Regcase - ROOT.cz
$text = "ROOT tecka cz";
$regexp = SQL_Regcase($text);
?>
<html>
<body>
<? echo "text: ".$text."<br>\nreg: ".$regexp."<br>\n" ?>
</body>
</html>
Funkce však nedáva před metaznaky \. Z textu ROOT.cz neudělá funkce [Rr][Oo][Oo][Tt]\.[Cc][Zz] , ale [Rr][Oo][Oo][Tt].[Cc][Zz] . Má to svůj důvod, ale nebudu se této funkci nijak zvlášť věnovat, protože není příliš používaná. Základní jsem však naznačil :)
<?
# Funkce SQL_Regcase(2) - ROOT.cz
$text = "ROOT.cz";
$regexp = SQL_Regcase($text);
?>
<html>
<body>
<? echo "text: ".$text."<br>\nreg: ".$regexp."<br>\n" ?>
</body>
</html>
Split a SplitI
Tyto dvě funkce slouží k dělení textu na části. Text se rozdělí tam, kde část textu vyhovuje regulárnímu výrazu. Rozdělené části textu se uloží do pole. Rozdíl mezi Split aSplitI spočívá v tom, že SplitI nerozlišuje velikost písmen.
Funkce má tři parametry. První je regulárka, ve které se řetězec dělí, druhý je text a třetí si schováme na potom :) Funkci si ukážeme na příkladu, kde rozdělíme větu na slova a jednotlivá slova vypíšeme.
[^[:alnum:]] znamená všechny znaky kromě čísel a písmen. Skript tedy předpokládá vynechávání diakritiky :)
<?
# Ukazka Splitu - ROOT.cz
$text = "Mam jednu nohu k zemi koolmou";
function rozdel($a)
{
$a = SplitI("[^[:alnum:]]+" ,$a);
for($i=0; $i<Count($a); $i++)
{
$poradi = $i+1;
$b = $b.$poradi.".slovo: ".$a[$i]."<br>\n";
}
return $b;
}
?>
<html>
<body>
<? echo rozdel($text) ?>
</body>
</html>
Třetí parametr určuje maximální počet částí. Pokud by byl limit 3, rozdělí se věta pouze na tři části: „Mam“, „jednu“ a „nohu k zemi koolmou“.
Split vs. Explode
Funkce Explode funguje podobně jako Split, ale nepracuje s regulárním výrazem, pouze s prostým textem. Je to daleko rychlejší, ale nelze to použít vždy. Nemůžeme zde použít množinu znaků apod. Pouze přesně daný znak nebo řetězec písmen. Funkcí Explode můžeme např. rozdělit emailovou adresu na část před zavináčem a za zavináčem daleko efektněji než se Split. S funkcí Split a regulárním výrazem by to bylo podstatně pomalejší. Od PHP verze 4.0.1 Explode obsahuje i nepovinný parametr limit, který používá stejně jako Split.
<?
# Explode - ROOT.cz
# email je v promenne $email
$casti = Explode("@", $email)
?>
<html>
<body>
<? echo "cast 1: ".$casti[0]."<br>\n(zavinac)<br>\ncast 2:".$casti[1] ?>
</body>
</html>
Zase končím :)
Tak a to je dnes všechno. Ve třech dílech našeho seriálu jsme prošli řetězce a všechny PHP Regexp-POSIXové funkce. Příště si porovnáme funkce regulárních výrazů s klasickými funkcemi pro práci s textem. Zjistíme, kdy je co výhodnější, i když jsem to již dnes nastínil :)
Linky:
PHP Manual > SQL_Regcase
PHP Manual > Split
PHP Manual > Explode