Πως αντικαθιστώ την ereg με την preg και ποιες οι διαφορές;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
DigiMyth
Δημοσιεύσεις: 12
Εγγραφή: 22 Δεκ 2010 16:25

Πως αντικαθιστώ την ereg με την preg και ποιες οι διαφορές;

Δημοσίευση από DigiMyth » 24 Δεκ 2010 13:57

Θέλω να αντικαταστήσω την ereg() γιατί στην έκδοση 5.3 δεν υποστηρίζεται, με την preg αλλά δεν ξέρω πως γίνεται. Δεν έχω βρει κάποιο παράδειγμα που να το εξηγεί...
Επίσης θέλω να μάθω τις διαφορές τους ώστε να μπορώ να αντικαταστήσω όλες τις εκφράσεις που έχω στον κώδικα.
Μια έκφραση είναι: ereg("[a-zA-Z0-9]", $char)


Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Πως αντικαθιστώ την ereg με την preg και ποιες οι διαφορές;

Δημοσίευση από cpulse » 25 Δεκ 2010 15:20

Και τα δύο είναι regular expressions. Τα ereg* είναι από τις βιβλιοθήκες του POSIX ενώ τα preg* είναι από τις βιβλιοθήκες της Perl. Η πρακτική διαφορά είναι οτι τα preg* είναι πολύ γρηγορότερα αλλά θέλουν ελαφρώς διαφορετικό χειρισμό γιατί η μαμά τους η Perl είναι από τις ποιο ανώμαλες γλώσσες του κόσμου.

Επειδή στην Perl δεν υπάρχουν πάντα τα quotes (") που ορίζουν strings θα πρέπει να χρησιμοποιείς εσωτερικά δικά σου delimiters. Πχ ας πούμε οτι ψάχνεις για ένα δεκαδικό νούμερο.

Με τα ereg* θα το έγραφες έτσι

Κώδικας: Επιλογή όλων

if (ereg('[0-9]+(\.[0-9]+)?', $input, $matches)) { do stuff }
Με τα preg* πρέπει να βάλεις delimiters. Συνήθως βάζουν slashes (/) αλλά είσαι ελεύθερος να βάλεις ό,τι θες

Κώδικας: Επιλογή όλων

if (preg_match('/[0-9]+(\.[0-9]+)?/', $input, $matches)) { do stuff }
Ένα καλό που βγαίνει από τα delimiters των preg* είναι οτι μετά τα delimiters μπορείς να βάζεις "pattern modifiers" για οδηγίες στην μηχανή πως να χειριστεί ειδικές καταστάσεις. Πχ γράφεις i για να το κάνεις case insentitive, κάτι που με τα ereg* θα έπρεπε να χρησιμοποιήσεις άλλη εντολή.

Κώδικας: Επιλογή όλων

if (preg_match('/[a-z]+/i', $input, $matches)) { do stuff }
Περισσότερα για τις διαφορές εδώ
Περισσότερα για τα pattern modifiers εδώ

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης