Regex Tester: χτίστε και κάντε debug patterns πάνω στο δικό σας κείμενο
Μια κανονική έκφραση είναι μια μικρή γλώσσα για να περιγράφει το σχήμα του κειμένου. Αντί να ρωτάτε «είναι εδώ αυτή η ακριβής λέξη;», ένα regex σας επιτρέπει να ρωτήσετε «υπάρχει μια συμβολοσειρά που μοιάζει έτσι;» Αυτό είναι που το κάνει ισχυρό για την εύρεση, επικύρωση, εξαγωγή και αντικατάσταση κειμένου σε επεξεργαστές κώδικα, αρχεία logs, εισαγωγές φορμών και scripts. Είναι επίσης αυτό που το κάνει εύκολο να το κάνετε λάθος, γιατί ένα pattern που διαβάζεται σωστά στο μυαλό σας μπορεί ήσυχα να ταιριάξει με πάρα πολλά, πολύ λίγα, ή τίποτα.
Γι' αυτό η διαδραστική δοκιμή ξεπερνά τον μαντικό τρόπο. Όταν πληκτρολογείτε ένα pattern και βλέπετε τα ταιριάσματα να φωτίζονται σε πραγματικό δείγμα κειμένου, παίρνετε άμεση ανατροφοδότηση: βλέπετε τι πιάστηκε, τι γλίστρησε, και ποια ομάδα καταγραφής άρπαξε ποιο κομμάτι. Ο Regex Tester μας εκτελείται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας. Το pattern σας και το δείγμα κειμένου σας δεν φεύγουν ποτέ από τη σελίδα, οπότε μπορείτε να επικολλήσετε γραμμές logs, emails, ή δεδομένα παραγωγής χωρίς να στέλνετε τίποτα σε server.

Τα δομικά στοιχεία που αξίζει να ξέρετε
Τα περισσότερα καθημερινά patterns συναρμολογούνται από ένα μικρό σύνολο κομματιών. Μάθετε αυτά και μπορείτε να διαβάσετε την πλειοψηφία των regex που συναντάτε στην πράξη.
Οι κλάσεις χαρακτήρων περιγράφουν ένα σύνολο επιτρεπόμενων χαρακτήρων. Το [aeiou] ταιριάζει με οποιοδήποτε μεμονωμένο φωνήεν, το [0-9] ταιριάζει με ένα ψηφίο, και το [a-zA-Z] ταιριάζει με ένα γράμμα. Ένα σύμβολο ^ μέσα στις αγκύλες αναιρεί το σύνολο, οπότε το [^0-9] σημαίνει «οποιοσδήποτε χαρακτήρας που δεν είναι ψηφίο». Οι συντομογραφίες γλιτώνουν πληκτρολόγηση: το \d είναι ψηφίο, το \w είναι χαρακτήρας λέξης (γράμματα, ψηφία, κάτω παύλα), το \s είναι κενό διάστημα, και η τελεία . ταιριάζει με σχεδόν οποιονδήποτε μεμονωμένο χαρακτήρα.
Οι ποσοδείκτες λένε πόσες φορές μπορεί να επαναλαμβάνεται το προηγούμενο κομμάτι. Το * σημαίνει μηδέν ή περισσότερες φορές, το + σημαίνει μία ή περισσότερες φορές, και το ? σημαίνει μηδέν ή μία φορά (προαιρετικό). Για ακριβείς μετρήσεις, το {3} σημαίνει ακριβώς τρεις και το {2,4} σημαίνει από δύο έως τέσσερις. Έτσι το \d{4} ταιριάζει με ένα τετραψήφιο έτος και το colou?r ταιριάζει και με τους δύο τρόπους γραφής.
Οι άγκυρες καρφώνουν ένα pattern σε μια θέση αντί σε έναν χαρακτήρα. Το ^ ταιριάζει με την αρχή του κειμένου, το $ ταιριάζει με το τέλος, και το \b σημαδεύει ένα όριο λέξης. Το pattern ^Error ταιριάζει μόνο με γραμμές που ξεκινούν με «Error», κάτι που είναι ακριβώς αυτό που θέλετε όταν σαρώνετε logs.
Οι ομάδες τυλίγουν μέρος ενός pattern σε παρενθέσεις, τόσο για να εφαρμόσετε έναν ποσοδείκτη σε πολλούς χαρακτήρες ταυτόχρονα όσο και για να καταγράψετε το ταιριασμένο κείμενο για επαναχρησιμοποίηση. Στο (\d{4})-(\d{2})-(\d{2}) κάθε ομάδα καταγράφει ένα στοιχείο ημερομηνίας που μπορείτε να εξάγετε αργότερα. Η εναλλαγή με το σύμβολο κάθετης γραμμής λειτουργεί σαν «ή»: το cat|dog|fish ταιριάζει με οποιαδήποτε από τις τρεις λέξεις.
Patterns που θα χρειαστείτε πραγματικά
Λίγες επαναλαμβανόμενες δουλειές καλύπτουν το μεγαλύτερο μέρος της πραγματικής εργασίας. Για να πιάσετε κάτι που μοιάζει με email, το [\w.+-]+@[\w-]+\.[\w.-]+ είναι ένα πρακτικό σημείο εκκίνησης· η πλήρης επικύρωση email σύμφωνα με την επίσημη προδιαγραφή είναι διαβόητα περίπλοκη, και ένα χαλαρό pattern είναι συνήθως η σωστή επιλογή για να επισημάνει υποψήφιους αντί να απορρίψει χρήστες.
Για αριθμούς, το \d+ αρπάζει ακολουθίες ψηφίων, ενώ το -?\d+(\.\d+)? ταιριάζει με προαιρετικά αρνητικά και δεκαδικά. Για να περικόψετε κενά στην αρχή και στο τέλος, ταιριάξτε ^\s+|\s+$ και αντικαταστήστε το με τίποτα. Για να βρείτε διπλασιασμένες λέξεις, το pattern με backreference \b(\w+)\s+\1\b ταιριάζει με μια λέξη ακολουθούμενη από τον εαυτό της, όπου το \1 αναφέρεται πίσω στην πρώτη καταγεγραμμένη ομάδα.

Οι σημαίες αλλάζουν τη συμπεριφορά ταιριάσματος
Οι σημαίες (flags) είναι διακόπτες που τροποποιούν ολόκληρο το pattern. Η σημαία global (g) βρίσκει κάθε ταίριασμα αντί να σταματήσει στο πρώτο, κάτι που θέλετε όταν επισημαίνετε όλες τις εμφανίσεις. Η σημαία case-insensitive (i) κάνει το error να ταιριάζει με τα «Error» και «ERROR» εξίσου. Η σημαία multiline (m) αλλάζει τα ^ και $ ώστε να ταιριάζουν στην αρχή και στο τέλος κάθε γραμμής, όχι μόνο σε ολόκληρο το κείμενο, κάτι που είναι απαραίτητο για δουλειά με logs γραμμή προς γραμμή. Άλλες χρήσιμες σημαίες περιλαμβάνουν το s (dotall, που επιτρέπει στην τελεία να ταιριάζει με αλλαγές γραμμής) και το u για πλήρη διαχείριση Unicode.
Οι παραλλαγές διαφέρουν ελαφρώς ανά γλώσσα
Το regex είναι μια οικογένεια διαλέκτων, όχι ένα σταθερό πρότυπο. Οι JavaScript, Python, PCRE (PHP), Java, .NET, Go, και Rust συμφωνούν στη βασική σύνταξη παραπάνω, αλλά αποκλίνουν στις άκρες: υποστήριξη lookbehind, σύνταξη ονομασμένων ομάδων ((?<name>...) έναντι (?P<name>...)), escapes ιδιοτήτων Unicode, και ποιες σημαίες υπάρχουν όλα ποικίλλουν. Ένα pattern που λειτουργεί σε μια μηχανή μπορεί να χρειάζεται μια μικρή προσαρμογή σε μια άλλη, οπότε αξίζει να το δοκιμάσετε πάνω στην παραλλαγή που πράγματι χρησιμοποιείτε. Όταν έχετε ρυθμίσει ένα pattern, τα υπόλοιπα εργαλεία προγραμματιστών και εργαλεία κειμένου μας μπορούν να βοηθήσουν με τη γύρω δουλειά καθαρισμού, κωδικοποίησης, και μετασχηματισμού των δεδομένων που μόλις ταιριάξατε.
Συχνές ερωτήσεις
Στέλνεται το κείμενό μου σε server;
Όχι. Ο Regex Tester εκτελείται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας. Το pattern και το δείγμα κειμένου σας παραμένουν στη συσκευή σας και δεν ανεβαίνουν ποτέ, οπότε είναι ασφαλές να επικολλάτε ευαίσθητα δεδομένα.
Ποια παραλλαγή regex χρησιμοποιεί αυτό το εργαλείο;
Χρησιμοποιεί τη μηχανή regex της JavaScript που είναι ενσωματωμένη στο πρόγραμμα περιήγησής σας. Η βασική σύνταξη ταιριάζει με αυτή που γνωρίζετε από τις περισσότερες γλώσσες, αν και ορισμένα προηγμένα χαρακτηριστικά διαφέρουν ελαφρώς από PCRE, Python, ή .NET.
Ποια είναι η διαφορά ανάμεσα σε greedy και lazy ταίριασμα;
Εξ ορισμού οι ποσοδείκτες είναι greedy (άπληστοι) και αρπάζουν όσο το δυνατόν περισσότερο κείμενο. Η προσθήκη ενός ερωτηματικού τους κάνει lazy (τεμπέληδες), οπότε αρπάζουν όσο το δυνατόν λιγότερο. Για παράδειγμα, το pattern τελεία-αστερίσκος είναι greedy ενώ το τελεία-αστερίσκος-ερωτηματικό είναι lazy.
Πώς ταιριάζω έναν κυριολεκτικό ειδικό χαρακτήρα;
Κάντε escape με μια ανάστροφη κάθετο. Για να ταιριάξετε μια πραγματική τελεία, γράψτε ανάστροφη κάθετο-τελεία. Το ίδιο ισχύει για άλλους μετα-χαρακτήρες όπως παρενθέσεις, αγκύλες, το σύμβολο συν, και το ερωτηματικό.
Γιατί το pattern μου δεν ταιριάζει με τίποτα;
Οι συνηθισμένες αιτίες είναι μια σημαία global που λείπει, άγκυρες που καρφώνουν το ταίριασμα στη λάθος θέση, ένας ειδικός χαρακτήρας χωρίς escape, ή greedy ποσοδείκτες που ξεπερνούν το όριο που περιμένατε. Δοκιμάστε κομμάτι προς κομμάτι για να βρείτε τον ένοχο.
Μπορώ να καταγράψω μέρη του ταιριάσματος;
Ναι. Τυλίξτε ένα τμήμα του pattern σε παρενθέσεις για να δημιουργήσετε μια ομάδα καταγραφής. Κάθε ομάδα αναφέρεται ξεχωριστά, κάτι που σας επιτρέπει να εξάγετε πεδία όπως το έτος, ο μήνας, και η ημέρα από μια ημερομηνία.
