Hlavní navigace

Regulární výrazy v PHP: Funkce (2)

Luboš Turek 20. 11. 2003

Dnes se v našem seriálu o regulárních výrazech podívame na funkci SQL_Regcase. Potom zaostříme na funkce Split a SplitI, které si porovnáme s textovou funkcí Explode.

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_Regcasevyt­váří 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][A­a] [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

Soubory:

Použité skripty

Našli jste v článku chybu?

21. 2. 2005 3:06

uživatel si přál zůstat v anonymitě
AD: Kosek...
Ta knizka urcite neni nejlepsi, pitomce...
Tolik polovicatech vysvetleni, kua. to jsem musel dohledavat vsude jinde, abych pochopil, jak fce vlastne funguje... :-(

26. 11. 2003 19:26

Autor (neregistrovaný)

to ti klidne reknu proc kosek nepouzival mysql_fetch_assoc()
je to proto, ze tahle funkce je az od 4.0.3 releasu...


Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: Nejenom EET, začaly platit další zákony

Nejenom EET, začaly platit další zákony

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

Vitalia.cz: Manželka je bio, ale na sex moc není

Manželka je bio, ale na sex moc není

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET