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.*kotaw 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
Swłą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');
