Ο οδηγός αρχαρίων για τις κανονικές εκφράσεις
Έχετε προσπαθήσει ποτέ να βρείτε ένα επαναλαμβανόμενο μοτίβο σε ένα κομμάτι κειμένου; Ίσως έχετε χρησιμοποιήσει κάτι σαν τη λειτουργία αναζήτησης στο πρόγραμμα περιήγησης ή τον επεξεργαστή κειμένου, αλλά όταν πρέπει να βρείτε κάτι πιο περίπλοκο, μπορεί να είναι σαν να βρείτε μια βελόνα στο παροιμιώδες άχυρο.
Ευτυχώς, υπάρχει ένας τρόπος για να επιλέξετε ακριβή μοτίβα στο κείμενο μέχρι το χαρακτήρα. Ονομάζεται κανονικές εκφράσεις και σας επιτρέπει να γίνετε κύριος της αναζήτησης μέσω του κειμένου.
Αν έχετε δώσει κάποια προσοχή σε βοηθητικά προγράμματα Linux, ίσως παρατηρήσετε ότι συχνά χρησιμοποιούν κάτι που ονομάζεται κανονικές εκφράσεις. Παρόλο που τα Unix και το Linux τα κατέστησαν δημοφιλή, οι κανονικές εκφράσεις διατίθενται σε διάφορα πακέτα, όπως το Microsoft Word.
Οι τακτικές εκφράσεις χρησιμοποιούνται κυρίως σε πολλά αξιοσημείωτα προγράμματα Linux, όπως το grep (που σημαίνει Global Regular Expression Print), το Awk και το Sed.
Είναι καλύτερο να σκεφτόμαστε τις κανονικές εκφράσεις ως μικρή γλώσσα, τα βασικά της οποίας μπορούν να περιγραφούν σε ένα μικρό χώρο.
Μπορείτε να κάνετε αναζήτηση χρησιμοποιώντας εργαλεία όπως Grep ή Ack είτε από την τυπική είσοδο είτε από ένα αρχείο κειμένου.
Για παράδειγμα, εάν προσπαθείτε να βρείτε τον όρο "Firefox" στην έξοδο από την εντολή ps, δείτε πώς θα το κάνατε:
ps | grep firefox
Και εδώ θα βρείτε τον όρο "maketecheasier" σε ένα αρχείο.
grep maketecheasier somefile
MetaCharacters
Στις κανονικές εκφράσεις, μπορείτε επίσης να αναζητήσετε τμήματα μιας συμβολοσειράς. Ο τρόπος που θα το κάνετε αυτό είναι με δύο χαρακτήρες. Είναι πραγματικά ονομάζονται metacharacters. Είναι παρόμοιοι με τους αγώνες μπαλαντέρ που ίσως έχετε χρησιμοποιήσει στο κέλυφος.
- "" Σημαίνει ένα μόνο χαρακτήρα. Το μοτίβο "ct" ταιριάζει με τις λέξεις "cat", "cut" και "cot".
- Το metacharacter "*" σημαίνει εύρεση του προηγούμενου χαρακτήρα 0 ή περισσότερες φορές. Το μοτίβο "l. * X" θα βρεθεί "linux", καθώς και οποιεσδήποτε άλλες λέξεις που συνέβησαν να ταιριάζουν με το ίδιο μοτίβο.
Ο λόγος που απλά δεν μπορείτε να χρησιμοποιήσετε κάτι σαν το "l*x"
σαν εσάς στο κέλυφος είναι επειδή ταιριάζοντας με 0 ή περισσότερους χαρακτήρες σημαίνει ότι θα βρεθούν γραμμές που δεν είχαν "l" ακολουθούμενη από οποιοδήποτε άλλο χαρακτήρα. Με άλλα λόγια, κάθε γραμμή που προσπαθεί να ταιριάξει, είναι απολύτως άχρηστη.
Εύρεση μοτίβων στην αρχή ή στο τέλος
Μπορείτε επίσης να βρείτε σχέδια που αρχίζουν στην αρχή ή στο τέλος των γραμμών.
- Ο χαρακτήρας "^" αντιστοιχεί στην αρχή
- Το "$" ταιριάζει στο τέλος.
Για παράδειγμα, το "sier$"
θα αντιστοιχούσε στο "Make Tech Easier" και το "^Make"
θα ταιριάζει με το "Make".
Βρείτε την αντιστοιχία σε ένα εύρος
Μπορείτε επίσης να εισέλθετε σε πιο περίπλοκους χαρακτήρες. Οτιδήποτε βάζετε σε αγκύλες θα αντιστοιχιστεί ως εύρος. Για παράδειγμα, το " [az]
" αντιστοιχεί σε όλα τα πεζά γράμματα. " [a-zA-Z]
" αντιστοιχεί σε όλα τα γράμματα. " [a-zA-Z0-9]
" αντιστοιχεί σε αλφαριθμητικούς χαρακτήρες. Μέσα στις αγκύλες, ο χαρακτήρας "^" αναιρεί τίποτα. " [^a-zA-Z]
" αντιστοιχεί σε οτιδήποτε δεν είναι γράμμα.
Μπορείτε επίσης να βρείτε όρια λέξεων με τους χαρακτήρες " \<
" και " \>
". Το μοτίβο " \
" ταιριάζει με το "Linux", προφανώς.
Μπορείτε να ταιριάξετε κάτι συγκεκριμένο αριθμό φορές με σγουρά αγκύλια. Το " {3}
" αντιστοιχεί σε κάτι τρεις φορές και το " {3, 5}
" αντιστοιχεί σε κάτι μεταξύ 3 και 5 φορές.
Με αυτά τα απλά δομικά στοιχεία, μπορείτε να ταιριάξετε μερικά αρκετά περίπλοκα πράγματα. Υπάρχουν πολλά περισσότερα για τις κανονικές εκφράσεις από ό, τι μπορεί να εξηγηθεί σε ένα σύντομο άρθρο. Αν θέλετε μια περιεκτική επεξεργασία του θέματος στο βιβλίο, θα πρέπει σίγουρα να ελέγξετε το Mastering Regular Expressions από τον Jeffrey EF Friedl.
Αποκάλυψη: Αυτό το άρθρο περιέχει μια σύνδεση θυγατρικών. Ενώ γράφουμε μόνο για προϊόντα που νομίζουμε ότι αξίζουμε να είμαστε σε αυτόν τον ιστότοπο, το Make Tech Easier μπορεί να κερδίσει μια μικρή προμήθεια εάν κάνετε κλικ και αγοράσετε το εν λόγω προϊόν.
Image Credit: xkcd