ereg()
w PHP nie powinien byÄ używany i zostaÅ dawno temu zastÄ
piony przez rozszerzenie PCRE (preg_match()
).
Powody dla których należy trzymaÄ siÄ preg_\*
sÄ
wymienione w tej wielkiej ramce na poczÄ
tku manualu, czyli:
- ObsÅuguje dużo wiÄcej wzorców, w tym bardzo przydatne “niezachÅanne” dopasowywanie:
ala.\*kota
w ereg zÅapie caÅy ciÄ g: “ala ma kota i jaÅ ma kota” i nic na to nie poradzisz. W preg można zÅapaÄ samo “ala ma kota” za pomocÄ/ala.\*?kota/
(te slashe to taki poperlowy spadek, patrz niżej). - ObsÅuguje asercje i warunkowe wzorce.
/ala ma (?!kota)/
pasuje do “ala ma psa”, “ala ma kuku na muniu”, ale nie “ala ma kota”. - Bezpiecznie dziaÅa z danymi binarnymi, podczas gdy
ereg()
może ucinaÄ stringi. - ObsÅuguje UTF\â8 i np.
/\\pL\\pM*/u
Åapie litery wraz z ich modyfikatorami. To mogÄ byÄ nawet kilkunastobajtowe kombinacje liter i modyfikatorów, które tworzÄ wizualnie jeden znak. - Jest dużo szybsze (to ma znaczenie jeÅli robisz parser). Jest nawet specjalny przeÅÄ
cznik
S
wÅÄ czajÄ cy optymalizacjÄ podczas kompilacji wzorców. - Jest ciÄ
gle rozwijane i wspierane, natomiast
ereg()
uznano za niewypaÅ. ZostaÅ caÅkowicie usuniÄty w PHP6. W PHP5 jest jeszcze trzymany tylko z litoÅci nad starymi skryptami. - SkÅadnia jest mniejwiÄcej kompatybilna z JavaScript i oczywiÅcie Perl.
BTW: ereg(\"prosty tekst\")
nigdy nie miaÅo prawa bytu i w preg
też nie ma. Patrz strpos()
i strstr()
.
Tipsy dla przesiadkowiczów
W preg
wyrażenie musi byÄ otoczone parÄ
takich samych znaków. Tradycyjnie używa siÄ /
(slash), ale przez to wyrażenia zawierajÄ
ce Åcieżki albo zamykajÄ
ce tagi HTML muszÄ
mieÄ dodatkowy backslash przed slashem w treÅci (\\/
), dlatego można wyrażenie otaczaÄ innym znakiem, np. wykrzyknikiem.
Na samym koÅcu, za znakiem otaczajÄ
cym wyrażenie, umieszcza siÄ flagi/przegÅÄ
czniki, które miÄdzy innymi pozwalajÄ
dopasowywaÄ niezależnie od wielkoÅci liter (zastÄpujÄ
c eregi
):
preg\match(\'!DoWolNaWielKosC, Niom\\!!i\');