Κανονικές Εκφράσεις για Ανθρώπους: Ένας Πρακτικός Οδηγός
Οι κανονικές εκφράσεις (regex) έχουν πρόβλημα φήμης. Φαίνονται σαν κάποιος να αποκοιμήθηκε στο πληκτρολόγιο: ^[\w.-]+@[\w-]+\.[\w.]+$. Εμφανίζονται σε κριτικές κώδικα, επεξεργαστές κειμένου, εργαλεία αναζήτησης και επαλήθευση φορμών. Οι προγραμματιστές είτε τις αγαπούν είτε τις αποφεύγουν εντελώς.
Η αλήθεια βρίσκεται κάπου ανάμεσα. Το regex είναι πραγματικά ισχυρό. Είναι επίσης πραγματικά μπερδευτικό στην αρχή. Αλλά δεν χρειάζεστε να κατακτήσετε κάθε αδιάφανο χαρακτηριστικό για να αποκτήσετε πρακτική αξία. Μια χούφτα μοτίβων καλύπτει τη μεγάλη πλειονότητα των πραγματικών περιπτώσεων χρήσης.
Τι Κάνει Πραγματικά το Regex
Μια κανονική έκφραση είναι ένα μοτίβο που περιγράφει ένα σύνολο συμβολοσειρών. Το δίνετε σε ένα εργαλείο αναζήτησης και βρίσκει κάθε συμβολοσειρά που ταιριάζει με το μοτίβο. Σκεφτείτε το ως μια πολύ ακριβή ερώτηση αναζήτησης.
Κανονική αναζήτηση: βρείτε ακριβώς το "γεια" Αναζήτηση regex: βρείτε οτιδήποτε που μοιάζει με διεύθυνση email, αριθμό τηλεφώνου, ημερομηνία, URL ή οποιοδήποτε άλλο μοτίβο μπορείτε να περιγράψετε.
Το γνωρίζατε; Οι κανονικές εκφράσεις εφευρέθηκαν από τον μαθηματικό Stephen Kleene το 1956 ως σημειογραφία για την περιγραφή "κανονικών γλωσσών" στη θεωρία τυπικής γλώσσας. Έκαναν την είσοδό τους στην πληροφορική μέσω πρώιμων επεξεργαστών κειμένου Unix στις δεκαετίες 1960 και 1970.
Τα Δομικά Στοιχεία
Κυριολεκτικοί Χαρακτήρες
Το απλούστερο regex είναι απλά κυριολεκτικό κείμενο. Το μοτίβο hello ταιριάζει με τη συμβολοσειρά "hello." Τίποτα φανταχτερό.
Η Τελεία (.) — Οποιοσδήποτε Μοναδικός Χαρακτήρας
Μια τελεία ταιριάζει με οποιοδήποτε μοναδικό χαρακτήρα (εκτός από νέα γραμμή).
h.tταιριάζει "hat," "hit," "hot," "hut," και ακόμη "h3t"
Κλάσεις Χαρακτήρων ([]) — Συγκεκριμένοι Χαρακτήρες
Τετράγωνες αγκύλες ορίζουν σύνολο επιτρεπόμενων χαρακτήρων σε αυτή τη θέση.
[aeiou]ταιριάζει με οποιοδήποτε φωνήεν[0-9]ταιριάζει με οποιοδήποτε ψηφίο[A-Za-z]ταιριάζει με οποιοδήποτε γράμμα (κεφαλαία ή πεζά)[^0-9]ταιριάζει με οποιοδήποτε χαρακτήρα που ΔΕΝ είναι ψηφίο (το^μέσα σε αγκύλες σημαίνει "όχι")
Ποσοτικοποιητές — Πόσα
Αυτά τα σύμβολα ελέγχουν επανάληψη:
| Σύμβολο | Σημασία | Παράδειγμα | Ταιριάζει |
|---|---|---|---|
* |
Μηδέν ή περισσότερα | ab*c |
"ac," "abc," "abbc," "abbbc" |
+ |
Ένα ή περισσότερα | ab+c |
"abc," "abbc," "abbbc" (όχι "ac") |
? |
Μηδέν ή ένα | colou?r |
"color" και "colour" |
{3} |
Ακριβώς 3 | a{3} |
"aaa" |
{2,4} |
Μεταξύ 2 και 4 | a{2,4} |
"aa," "aaa," "aaaa" |
Άγκυρες — Θέση
^στην αρχή σημαίνει "αρχή συμβολοσειράς"$στο τέλος σημαίνει "τέλος συμβολοσειράς"^hello$ταιριάζει μόνο με την ακριβή συμβολοσειρά "hello," όχι "say hello" ή "hello world"
Συντομογραφικές Κλάσεις
Οι συνηθισμένες κλάσεις χαρακτήρων έχουν συντομεύσεις:
| Συντομογραφία | Ισοδύναμο | Σημασία |
|---|---|---|
\d |
[0-9] |
Οποιοδήποτε ψηφίο |
\w |
[A-Za-z0-9_] |
Οποιοσδήποτε χαρακτήρας "λέξης" |
\s |
[ \t\n\r] |
Οποιοσδήποτε κενός χαρακτήρας |
\D |
[^0-9] |
Οποιοσδήποτε μη ψηφίο |
\W |
[^A-Za-z0-9_] |
Οποιοσδήποτε μη χαρακτήρας λέξης |
\S |
[^ \t\n\r] |
Οποιοσδήποτε μη κενός χαρακτήρας |
Ομάδες (()) — Ομαδοποίηση και Λήψη
Οι παρενθέσεις ομαδοποιούν μέρη ενός μοτίβου. Αυτό είναι χρήσιμο για εφαρμογή ποσοτικοποιητών σε ομάδα ή για εξαγωγή συγκεκριμένων μερών αντιστοίχισης.
(ab)+ταιριάζει "ab," "abab," "ababab"(\d{3})-(\d{4})ταιριάζει "555-1234" και λαμβάνει ξεχωριστά "555" και "1234"
Ο Σωλήνας (|) — Ή
Ο σωλήνας σημαίνει "ή."
cat|dogταιριάζει "cat" ή "dog"(jpg|png|gif)ταιριάζει με οποιαδήποτε από αυτές τις τρεις επεκτάσεις εικόνας
Πρακτικά Μοτίβα που Μπορείτε να Χρησιμοποιήσετε Σήμερα
Αντιστοίχιση Διεύθυνσης Email (Απλή)
[\w.-]+@[\w-]+\.[\w.]+
Ανάλυση:
[\w.-]+— ένας ή περισσότεροι χαρακτήρες λέξης, τελείες ή παύλες (το τοπικό μέρος)@— κυριολεκτικό σύμβολο @[\w-]+— ένας ή περισσότεροι χαρακτήρες λέξης ή παύλες (ο τομέας)\.— κυριολεκτική τελεία (διαφυγή επειδή το.είναι ειδικός χαρακτήρας)[\w.]+— ένας ή περισσότεροι χαρακτήρες λέξης ή τελείες (το TLD)
Προσοχή Η επαλήθευση email με regex είναι γνωστά δύσκολο να γίνει τέλεια. Το απλό μοτίβο παραπάνω καλύπτει το 99% των πραγματικών διευθύνσεων email αλλά δεν χειρίζεται κάθε οριακή περίπτωση που ορίζεται στην προδιαγραφή RFC. Για επαλήθευση παραγωγής, χρησιμοποιήστε τη βιβλιοθήκη επαλήθευσης email της γλώσσας προγραμματισμού σας.
Αντιστοίχιση Αριθμού Τηλεφώνου (Μορφή ΗΠΑ)
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Αυτό ταιριάζει:
- (555) 123-4567
- 555-123-4567
- 555.123.4567
- 555 123 4567
Αντιστοίχιση URL
https?://[\w.-]+(/[\w./-]*)?
Αυτό ταιριάζει:
Αντιστοίχιση Ημερομηνίας (ΕΕΕΕ-ΜΜ-ΗΗ)
\d{4}-\d{2}-\d{2}
Αυτό ταιριάζει: 2026-03-23, 1999-12-31, κ.λπ.
Εύρεση Διπλών Λέξεων
\b(\w+)\s+\1\b
Αυτό ταιριάζει επαναλαμβανόμενες λέξεις όπως "the the" ή "is is." Το \1 αναφέρεται σε ό,τι λήφθηκε από την πρώτη ομάδα.
Αντιστοίχιση Διεύθυνσης IPv4
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Αυτό ταιριάζει μοτίβα όπως 192.168.1.1 ή 10.0.0.255.
Συμβουλές για Γραφή Regex
1. Ξεκινήστε Απλά, Έπειτα Βελτιώστε
Μην προσπαθείτε να γράψετε το τέλειο regex στην πρώτη απόπειρα. Ξεκινήστε με ένα ευρύ μοτίβο, δοκιμάστε το στα δεδομένα σας και σφίξτε το.
2. Πάντα Δοκιμάζετε
Το regex είναι εύκολο να γίνει λανθασμένα. Ένας ποσοτικοποιητής που λείπει ή μια μη διαφυγμένη τελεία μπορεί να αλλάξει εντελώς τι ταιριάζει. Πάντα δοκιμάζετε το μοτίβο σας σε πραγματικά δεδομένα πριν το χρησιμοποιήσετε στην παραγωγή.
3. Διαφύγετε Ειδικούς Χαρακτήρες
Αν χρειάζεστε να αντιστοιχήσετε κυριολεκτική τελεία, παρένθεση, αγκύλη ή άλλο ειδικό χαρακτήρα, διαφύγετέ τον με backslash: \., \(, \[.
4. Χρησιμοποιήστε Σχόλια και Ονομαζόμενες Ομάδες
Σε σύνθετα μοτίβα, χρησιμοποιήστε ονομαζόμενες ομάδες και σχόλια (όπου υποστηρίζεται) για να κάνετε το regex αναγνώσιμο. Ο μελλοντικός σας εαυτός θα σας ευχαριστήσει.
5. Γνωρίστε Πότε να Μην Χρησιμοποιείτε Regex
Το regex είναι το λάθος εργαλείο για ανάλυση HTML, XML, JSON ή οποιασδήποτε φωλιαστής δομής. Χρησιμοποιήστε κατάλληλο αναλυτή γι' αυτά.
Συμβουλή Δοκιμάστε και αποσφαλματώστε τα μοτίβα regex σε πραγματικό χρόνο: Πώς να Δοκιμάσετε Μοτίβα Regex. Επικολλήστε το μοτίβο και τα δεδομένα δοκιμής σας και δείτε τις αντιστοιχίσεις επισημασμένες άμεσα.
Αρχίστε να δοκιμάζετε regex τώρα:
Δωρεάν, άμεση ανατροφοδότηση και δεν απαιτείται εγγραφή.