Το προφίλ μας στο Google Plus
0

Οι πανίσχυρες κανονικές εκφράσεις [μέρος 1]

Υπάρχουν περιπτώσεις που μια αφηρημένη περιγραφή είναι πραγματικά πολύτιμη. Αν σας κάνει εντύπωση η πρόταση που μόλις διαβάσατε, ίσως είναι επειδή πιστεύετε ότι αφαίρεση σημαίνει ασάφεια. Όμως αυτό είναι εντελώς λάθος. Για ν’ αποδείξουμε τον ισχυρισμό μας, σας προσκαλούμε σε ένα ταξίδι στον αφηρημένα θαυμαστό κόσμο των regular expressions! Μη γελιέστε: Δεν πρόκειται για ένα αδιάφορο ταξίδι αναψυχής! Αν μάλιστα παίρνετε έστω και λίγο στα σοβαρά την επιστήμη της Πληροφορικής, τότε δεν πρόκειται να το αποφύγετε. Τι θα λέγατε, λοιπόν, να το κάνετε μαζί μας; Εμείς πάντως είμαστε ενθουσιασμένοι μ’ αυτή την προοπτική!

deltaHacker 021 (τεύχος Ιουνίου 2013) | Οι πανίσχυρες κανονικές εκφράσεις [ μέρος 1 ]

Διαβάζουμε το man page ενός προγράμματος και μαθαίνουμε ότι υποστηρίζει regular expressions. Μελετάμε τα αρχεία ρυθμίσεων μιας δικτυακής υπηρεσίας και βλέπουμε ότι μπορούμε να περιγράφουμε ολόκληρα σύνολα με domain names ή και διευθύνσεις IP, με τη βοήθεια των regular expressions. Αποφασίζουμε να γράψουμε ένα πρόγραμμα σε PHP, σε Perl, σε Python ή σε κάποια άλλη γλώσσα, και συνειδητοποιούμε ότι μπορούμε να ελέγξουμε την εγκυρότητα του user input χρησιμοποιώντας regular expressions. Τι είναι επιτέλους αυτές οι κανονικές εκφράσεις (regular expressions); Η μορφή τους, πάντως, μόνο σε κάτι το κανονικό δεν παραπέμπει, ενώ το συντακτικό τους μοιάζει απίστευτα περίπλοκο. Μολαταύτα, όλα τα εργαλεία που φημίζονται για την ευελιξία και την ισχύ που παρέχουν στο χρήστη, υποστηρίζουν τις κανονικές εκφράσεις και τις αξιοποιούν κατά κόρον!

Φύση και αποστολή
Μια κανονική έκφραση ή ένα regular expression, όπως λέμε συνήθως, αποτελεί μια αλληλουχία χαρακτήρων με την οποία περιγράφουμε τη γενική μορφή μιας άλλης αλληλουχίας χαρακτήρων. Με το κατάλληλο regular expression μπορούμε να περιγράψουμε τη μορφή μιας διεύθυνσης email, τη μορφή μιας ημερομηνίας ή κάτι αρκετά πιο γενικό κι ενδεχομένως πιο περίπλοκο. Παράδειγμα: μια γραμμή που περιλαμβάνει τις λέξεις “Failed” και “user”, ενώ μετά από αυτές (κι όχι νωρίτερα) περιλαμβάνει μια διεύθυνση IP, η οποία όμως διαφέρει από τη διεύθυνση του δικού μας μηχανήματος. Άραγε, πώς θα αναζητούσατε μια γραμμή που ικανοποιεί αυτούς τους περιορισμούς;

Όπως αντιλαμβάνεστε, με τη βοήθεια των regular expressions μπορούσε να πραγματοποιούμε οσοδήποτε αφηρημένες αναζητήσεις. Με άλλα λόγια, έχουμε τη δυνατότητα ν’ αναζητάμε character strings, για τα οποία γνωρίζουμε μόνο τη γενική μορφή κι όχι το ακριβές περιεχόμενο. Σκεφτείτε την περίπτωση που θέλουμε να εντοπίσουμε τις διευθύνσεις email μέσα σε ένα αρχείο, τους δεκαδικούς αριθμούς (όσους περιλαμβάνουν το σημείο της υποδιαστολής) ή τις διπλές λέξεις σε κάποιο κείμενο (όσες εμφανίζονται δύο φορές διαδοχικά). Ας σταθούμε λίγο στο πρώτο παράδειγμα. Αναζητώντας τα strings που έχουν τη μορφή μιας διεύθυνσης email, μπορούμε να εξαγάγουμε εύκολα όλες τις διευθύνσεις που περιλαμβάνει ένα αρχείο (π.χ., η βάση δεδομένων ενός mail client). Εναλλακτικά, θα μπορούσαμε να αναζητήσουμε strings που έχουν τη μορφή μιας διεύθυνσης email, μέσα στο κείμενο που εισάγει ο χρήστης στο πεδίο email μιας δικτυακής φόρμας. Από την έκβαση της αναζήτησης (από το αν δηλαδή θα επιστρέψει κάποιο αποτέλεσμα ή όχι) μπορούμε να τσεκάρουμε αν ο χρήστης πράγματι εισήγαγε μια διεύθυνση email ή όχι. Τελικά, με τη βοήθεια των regular expressions μπορούμε να πραγματοποιούμε περίπλοκες αναζητήσεις, αλλά να κάνουμε κι αυτό που ονομάζεται sanity check.

Διαβάστε ολόκληρο το άρθρο στο deltaHacker 021 (τεύχος Ιουνίου 2013).

Το μηνιαίο περιοδικό deltaHacker είναι πλέον ηλεκτρονικό! Μάθετε για τις νέες, απίστευτες τιμές και κάντε τώρα την παραγγελία σας συμπληρώνοντας τη σχετική φόρμα.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων