30
Jak v PHP nahradit zastaralé funkce ereg a eregi
V rámci mé bakalářky (úprava informačního systému, více napíšu časem) jsem převzal již existující PHP skript, ve kterém se vyskytovaly funkce ereg a eregi. Ty slouží k hledání v řetězci pomocí regulárních výrazů, od verze PHP 5.3 jsou však již zastaralé a proto bylo třeba je nahradit. Přestože je to triviální operace, chvilku jsem se u toho zasekl, proto předkládám jednoduchý postup, jak se těchto „vykopávek“ zbavit.
Ereg má následující syntaxi: ereg(regulární výraz, prohledávaný řetězec, pole obsahující nalezené řetězce)
Náhradou za funkci ereg je preg_match, který umožňuje zachovat stejnou syntaxi, je však nutné lehce upravit podobu regulárního výrazu, ten nyní vyžaduje použití tzv. delimiterů (je to dáno tím, že funkce ereg využívá POSIX regulárních výrazů, zatímco preg_match přešla na PCRE (Perl Compatible Regular Expression)).
Právě zde jsem narazil na problém, kdy jsem jako delimiter použil znak ‚/’, ten jsem měl ale i uvnitř regulárního výrazu a tudíž bylo nutné jej escapovat, na což jsem nemohl nějakou chvíli přijít. Protože tento znak se v regulárních výrazech může vyskytovat poměrně často, doporučuji používat spíše ‚#‘ nebo ‚~’.
<?php ereg("[0-9]+", "Honzovi je 14 let", $vek); preg_match("#[0-9]+#", "Honzovi je 14 let", $vek); // 14 eregi("karel", "Jmenuji se Karel a mám rád nanuky", $jmeno); preg_match("#karel#i", "Jmenuji se Karel a mám rád nanuky", $jmeno); // Karel ?>
Stejně je tomu i v případě funkce ereg_replace, která slouží pro nahrazení textu pomocí regulárního výrazu a má tuto syntaxi: ereg_replace(regulární výraz, čím se nahradí, v čem se nahradí).
Tentokrát použijeme funkci preg_replace, opět se stejnou syntaxí.
$novy = ereg_replace("[0-9]+", "\\0\\0", "Honzovi je 14 let"); $novy = preg_replace("#([0-9]+)#", "$1$1", "Honzovi je 14 let"); // Honzovi je 1414 let $novy = eregi_replace("karel", "\\0\\0", "Jmenuji se Karel a mám rád nanuky"); $novy = preg_replace("#(karel)#i", "$1$1", "Jmenuji se Karel a mám rád nanuky"); // Jmenuji se KarelKarel a mám rád nanuky
Všimněte si odlišné syntaxe regulárního výrazu pro funkci preg_replace, více o PCRE zde.
Čti dál:
7 komentářů k “Jak v PHP nahradit zastaralé funkce ereg a eregi”
Vyjádři svůj názor
O mně
kategorie
SSME FI MUNI
FIT VUT
Odkazy
Kupte si odkaz! PR 3, SR 2
Kupte si odkaz! PR 3, SR 2
Kupte si odkaz! PR 3, SR 2
TAGS
Nejčtenější články
- První semestr na FIT VUT - 173 053 views
- 7 tipů Jak spát méně a efektivněji - 167 980 views
- Třetí semestr na FIT VUT - 153 467 views
- Jak v PHP nahradit zastaralé funkce ereg a eregi - 83 265 views
- Pátý semestr na FIT VUT - 59 693 views
- 7 tipů jak si usnadnit a urychlit práci s HTML a CSS - 57 157 views
- TEST: Kolik spánku je denně potřeba? - 53 199 views
- 9 nečekaně jednoduchých technik, které z vás udělají mistra komunikace - 44 151 views
- Čtvrtý semestr na FIT VUT - 40 180 views
- Druhý semestr na FIT VUT - 37 841 views
Nejnovější komentáře
- 5 nových tipů pro lepší spánek « Milan Seitler u 7 tipů Jak spát méně a efektivněji
- 5 nových tipů pro lepší spánek « Milan Seitler u TEST: Je možné spát 6 hodin denně? Tak určitě!
- David u 9 nečekaně jednoduchých technik, které z vás udělají mistra komunikace
- Petr u Bakalářské studium na FIT VUT
- Martin u Jak v PHP nahradit zastaralé funkce ereg a eregi
archiv
- Prosinec 2018
- Listopad 2015
- Září 2015
- Březen 2015
- Květen 2014
- Duben 2014
- Prosinec 2013
- Listopad 2013
- Červenec 2013
- Červen 2013
- Duben 2013
- Březen 2013
- Únor 2013
- Leden 2013
- Prosinec 2012
- Listopad 2012
- Říjen 2012
- Září 2012
- Srpen 2012
- Červenec 2012
- Červen 2012
- Květen 2012
- Březen 2012
- Únor 2012
- Leden 2012
- Listopad 2011
- Říjen 2011
- Srpen 2011
- Červen 2011
- Duben 2011
- Únor 2011
- Leden 2011
Hmm, pěkné, ale proč jsi o tom psal? Aby každý věděl, že jsi objevil Ameriku?
Hm, proč píšeš ty sem? Aby každý věděl, že jsi jelito? :-)))
Ach jo .. ty lidi
Děkuji za článeček, byl pro mě poučením.
Ještě větším poučením je níže uvedená diskuse (zda typická pro nás Čechy nevím).
Na jedné straně snaha a tvorba na druhé straně kritika (zcela nekonstruktivní) a boření.
Jak dopadl výsledek konfrontace tvoření a boření.
Tvůrce přešel do netvůrčí agrese a osobního a vulgárního útoku.
Poučení: Tvůrci, tvořte a nás co na to nemáme nechejte svému osudu :-)
Janeg
If(eregi(„://“, $page)){
Echo(„Nesnaž se lamo…“);
} else {
require_once(„config.php“);}
jak nahradíš toto ?:-)
Děkuji za článek, moc mi pomohl.
Upozornil bych na několik odlišností v ereg() vs. preg_match(), které asi většinou nikomu vadit nebudou, ale je dobré o nich vědět:
1. ereg() vrací délku nalezeného řetězce, pokud nebyl zadán třetí parametr, nebo vrací FALSE / 1, pokud třetí parametr zadán byl. Pokud však nalezne řetězec délky 0, vrací 1 (na znamení, že match proběhl správně, i když je výsledkem „nic“ – např. ereg(‚(.*)’, “)). Prostě trochu guláš :-)
2. ereg() vrací FALSE při chybě, ale i v případě, že není nalezena shoda. Preg_match() vrací FALSE při chybě, ale 0 nebo 1 pokud není / je nalezena shoda.
3. Ve třetím parametru, kde se vrací nalezené řetězce odpovídající jednotlivým „závorkám“, se chování obou funkcí trochu liší. Pokud na nějakou závorku vůbec nedojde, ereg() do pole přidá na příslušnou pozici alespoň FALSE, kdežto preg_match() dotyčnou pozici do výsledného pole vůbec nepřidá.