Δοκιμαστής Regex

Διαφήμιση

Εισάγετε μια κανονική έκφραση και κείμενο δοκιμής για να δείτε αντιστοιχίες σε πραγματικό χρόνο.

/ /
Γρήγορα Μοτίβα
Κείμενο Δοκιμής
Αντιστοιχίες
Σας φάνηκε χρήσιμο αυτό το εργαλείο;
Θέλετε να μας πείτε περισσότερα;
0/500
Θέλετε να επικοινωνήσουμε μαζί σας;
Ευχαριστούμε για τα σχόλιά σας!
Διαφήμιση

Σχετικά με αυτό το εργαλείο

Οι κανονικές εκφράσεις έχουν τις ρίζες τους στο 1956, όταν ο μαθηματικός Stephen Kleene εισήγαγε την έννοια των "κανονικών γεγονότων" ως σημειογραφία για την περιγραφή μοτίβων στη θεωρία τυπικών γλωσσών. Πάνω από μια δεκαετία αργότερα, το 1968, ο Ken Thompson μετέφερε τα regex από τη θεωρία στην πράξη υλοποιώντας αντιστοίχιση μοτίβων στον επεξεργαστή κειμένου ed, ο οποίος αργότερα εξελίχθηκε στο grep—ένα εργαλείο του οποίου το όνομα σημαίνει κυριολεκτικά "global regular expression print." Αυτή η ανακάλυψη έκανε τα regex απαραίτητο εργαλείο στο οικοσύστημα Unix και έθεσε τα θεμέλια για την υιοθέτησή τους σε σχεδόν κάθε γλώσσα προγραμματισμού. Στη σύγχρονη ανάπτυξη λογισμικού, οι κανονικές εκφράσεις χρησιμοποιούνται για τα πάντα: από επικύρωση εισόδου και εξαγωγή δεδομένων μέχρι λειτουργίες αναζήτησης-αντικατάστασης και ανάλυση αρχείων καταγραφής. Γλώσσες όπως JavaScript, Python, Java και Perl υλοποιούν μηχανές regex με λεπτές διαφοροποιήσεις, αλλά οι βασικές έννοιες παραμένουν καθολικές: κλάσεις χαρακτήρων, ποσοδείκτες, άγκυρες, ομαδοποίηση και εναλλαγή σχηματίζουν μια ισχυρή μίνι-γλώσσα για την περιγραφή μοτίβων κειμένου. Παρά τη δύναμή τους, οι κανονικές εκφράσεις φημίζονται για την πολυπλοκότητά τους. Τα πυκνά μοτίβα μπορούν να γίνουν δυσνόητα και δύσκολα στη συντήρηση, οδηγώντας στο περίφημο αστείο ότι όταν λύνεις ένα πρόβλημα με regex, τώρα έχεις δύο προβλήματα. Η σύνταξη ανταμείβει την ακρίβεια αλλά τιμωρεί την ασάφεια, και λεπτά σφάλματα μπορούν να παράγουν απροσδόκητες αντιστοιχίσεις ή καταστροφική απόδοση. Αυτό το εργαλείο δοκιμών γεφυρώνει το χάσμα μεταξύ της συγγραφής και της κατανόησης regex. Παρέχοντας επισήμανση αντιστοιχιών σε πραγματικό χρόνο, οπτικοποίηση ομάδων σύλληψης και επεξήγηση μοτίβων, σας επιτρέπει να πειραματιστείτε διαδραστικά. Όλη η επεξεργασία γίνεται εξ ολοκλήρου στον browser σας—τα μοτίβα και τα δεδομένα σας δεν μεταδίδονται ποτέ σε κανέναν server.

Η Ιστορία και Επιστήμη των Κανονικών Εκφράσεων

Οι κανονικές εκφράσεις προέρχονται από τη μαθηματική θεωρία τυπικών γλωσσών που ανάπτυξε ο Stephen Kleene το 1956. Η έννοια του "κανονικά γεγονότα" περιέγραφε μοτίβα που μπορούσαν να αναγνωριστούν από πεπερασμένα αυτόματα—αφηρημένες μηχανές με σταθερό αριθμό καταστάσεων που επεξεργάζονται είσοδο ένα σύμβολο τη φορά. Αυτό το θεωρητικό θεμέλιο καθιέρωσε ότι κάθε μοτίβο περιγράψιμο από κανονική έκφραση αντιστοιχεί σε έναν συγκεκριμένο τύπο υπολογιστικής μηχανής. Ο Ken Thompson έφερε τις κανονικές εκφράσεις από τα μαθηματικά στην πληροφορική το 1968 όταν υλοποίησε αντιστοίχιση μοτίβων στους επεξεργαστές κειμένου QED και ed στα Bell Labs. Η καινοτομία του ήταν η μεταγλώττιση μοτίβων regex σε κώδικα μηχανής που προσομοίωνε έναν μη ντετερμινιστικό πεπερασμένο αυτόματο (NFA), κάνοντας την αντιστοίχιση αρκετά γρήγορη για διαδραστική χρήση. Αυτή η εργασία οδήγησε απευθείας στο εργαλείο grep, που έγινε ένα από τα πιο επιδραστικά εργαλεία Unix. Η εξέλιξη των υλοποιήσεων απέκλινε σε δύο κύριες προσεγγίσεις: τον αρχικό σχεδιασμό NFA του Thompson (που χρησιμοποιείται από τις περισσότερες σύγχρονες γλώσσες συμπεριλαμβανομένων JavaScript, Python και Java) και μια προσέγγιση ντετερμινιστικού πεπερασμένου αυτόματου (DFA) που χρησιμοποιείται από εργαλεία όπως awk. Οι μηχανές NFA υποστηρίζουν χαρακτηριστικά όπως αναφορές προς τα πίσω και lookaheads που είναι μαθηματικά αδύνατα για μηχανές DFA, αλλά μπορούν να υποφέρουν από εκθετικό backtracking. Η Perl επαναστατικοποίησε τις κανονικές εκφράσεις στα τέλη του 1980 προσθέτοντας χαρακτηριστικά πολύ πέρα από τον αρχικό φορμαλισμό του Kleene: lookaheads, lookbehinds, μη-αρπακτικούς ποσοδείκτες, ονομασμένες ομάδες σύλληψης και υποστήριξη Unicode. Αυτές οι επεκτάσεις έκαναν τις regex της Perl τόσο εκφραστικές που έγιναν de facto πρότυπο, γεννώντας τη βιβλιοθήκη PCRE που χρησιμοποιείται από PHP, Apache και πολλά άλλα εργαλεία. Η JavaScript υιοθέτησε τη δική της παραλλαγή regex στην προδιαγραφή ECMAScript, προσθέτοντας σταδιακά χαρακτηριστικά—πιο πρόσφατα τις σημαίες 'd' για δείκτες αντιστοίχισης και 'v' για βελτιωμένες κλάσεις Unicode.

Πώς να Χρησιμοποιήσετε

  1. Εισάγετε το μοτίβο regex και επιλέξτε σημαίες (g για global, i για αδιάφορο πεζών-κεφαλαίων, m για πολλές γραμμές).
  2. Επικολλήστε κείμενο δοκιμής για να δείτε αντιστοιχίες σε πραγματικό χρόνο. Χρησιμοποιήστε Γρήγορα Μοτίβα για email ή URL.
  3. Ελέγξτε λεπτομέρειες αντιστοιχιών με ομάδες σύλληψης και δείκτες. Ενεργοποιήστε Αντικατάσταση για δοκιμή με

    Μεθοδολογία, $2.

Μεθοδολογία

Αυτό το εργαλείο χρησιμοποιεί τη native μηχανή RegExp της JavaScript, που υλοποιεί την προδιαγραφή κανονικών εκφράσεων ECMAScript. Τα μοτίβα μεταγλωττίζονται κατά την εκτέλεση χρησιμοποιώντας τον κατασκευαστή RegExp, δεχόμενα τη συμβολοσειρά μοτίβου και οποιονδήποτε συνδυασμό σημαιών (g, i, m, s, u, y). Αν το μοτίβο περιέχει συντακτικά σφάλματα, ο κατασκευαστής ρίχνει εξαίρεση που το εργαλείο πιάνει και εμφανίζει ως μήνυμα επικύρωσης. Για global μοτίβα (σημαία g ενεργοποιημένη), το εργαλείο χρησιμοποιεί έναν επαναληπτικό βρόχο RegExp.exec() για εύρεση κάθε αντιστοίχισης στη συμβολοσειρά δοκιμής, συλλέγοντας πλήρες κείμενο, τιμές ομάδων σύλληψης, ονομασμένες ομάδες και δείκτες χαρακτήρων. Χωρίς τη σημαία global, επιστρέφεται μόνο η πρώτη αντιστοίχιση. Η προσέγγιση exec() παρέχει πλουσιότερα δεδομένα από τη String.match(), συμπεριλαμβανομένης της ιδιότητας index. Η επισήμανση αντιστοιχίσεων επιτυγχάνεται μέσω επεξεργασίας εγγράφου αντί αντικατάστασης innerHTML. Το εργαλείο χωρίζει τη συμβολοσειρά δοκιμής στα όρια αντιστοιχίσεων και τυλίγει τα αντίστοιχα τμήματα σε μορφοποιημένα span, διατηρώντας ακριβώς το αρχικό κείμενο. Αυτή η προσέγγιση αποτρέπει ζητήματα HTML injection. Η προεπισκόπηση αντικατάστασης εφαρμόζει String.replace() με το μοτίβο υποκατάστασης του χρήστη για ζωντανή προεπισκόπηση.

Κατανόηση των Αποτελεσμάτων σας

Η πράσινη επισήμανση δείχνει τα αντιστοιχισμένα τμήματα κείμενου στη συμβολοσειρά δοκιμής σας. Κάθε επισημασμένη περιοχή αντιστοιχεί σε μια πλήρη αντιστοίχιση του μοτίβου σας. Κατά τη χρήση ομάδων σύλληψης (παρενθέσεις), ο πίνακας λεπτομερειών εμφανίζει την πλήρη αντιστοίχιση ως Ομάδα 0 και κάθε ομάδα αριθμημένη διαδοχικά από την Ομάδα 1. Οι ονομασμένες ομάδες με σύνταξη (?<όνομα>...) εμφανίζονται με τις ετικέτες τους. Οι σημαίες που επιλέγετε αλλάζουν θεμελιωδώς τη συμπεριφορά αντιστοίχισης. Η σημαία 'g' (global) βρίσκει κάθε εμφάνιση αντί να σταματά στην πρώτη. Η σημαία 'i' ενεργοποιεί αντιστοίχιση αδιάφορη πεζών-κεφαλαίων. Η σημαία 'm' (πολυγραμμική) κάνει τα ^ και $ να αντιστοιχίζονται σε όρια γραμμής αντί μόνο στην αρχή και τέλος όλης της συμβολοσειράς. Η σημαία 's' (dotAll) επιτρέπει στον μεταχαρακτήρα τελεία να αντιστοιχίζει χαρακτήρες νέας γραμμής. Οι συντομογραφίες κλάσεων διευκολύνουν τη δημιουργία μοτίβων: \d αντιστοιχίζει οποιοδήποτε ψηφίο (ισοδύναμο με [0-9]), \w αντιστοιχίζει χαρακτήρες λέξης (γράμματα, ψηφία, κάτω παύλα), και \s αντιστοιχίζει κενούς χαρακτήρες. Οι ποσοδείκτες ελέγχουν την επανάληψη: * σημαίνει μηδέν ή περισσότερα, + σημαίνει ένα ή περισσότερα, ? σημαίνει μηδέν ή ένα, και {n,m} καθορίζει ακριβές εύρος. Κάνετε πάντα escape στους ειδικούς χαρακτήρες regex με backslash. Δοκιμάστε τα μοτίβα σχολαστικά με ακραίες περιπτώσεις πριν τη χρήση σε κωδικά παραγωγής.

Πρακτικά Παραδείγματα

Επικύρωση email: ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ ταιριάζει με '[email protected]' αλλά απορρίπτει 'user@' ή '@domain.com'. Αριθμοί τηλεφώνου: \d{3}[-.\s]?\d{3}[-.\s]?\d{4} ταιριάζει ευέλικτα με '555-123-4567', '555.123.4567' και '5551234567'. URLs: https?://[\w.-]+\.[a-zA-Z]{2,}[/\w.-]* ταιριάζει με http και https συνδέσμους. Εξαγωγή δεδομένων με ομάδες σύλληψης: (\d{4})-(\d{2})-(\d{2}) εφαρμοσμένο στο '2024-01-15' συλλαμβάνει έτος, μήνα και ημέρα ως ξεχωριστές ομάδες ($1='2024', $2='01', $3='15'). Οι ονομασμένες ομάδες το κάνουν πιο σαφές: (?\d{4})-(?\d{2})-(?\d{2}). Αναζήτηση και αντικατάσταση: μετατροπή 'Επώνυμο, Όνομα' σε 'Όνομα Επώνυμο' με μοτίβο (\w+),\s*(\w+) και αντικατάσταση $2 $1. Εξαγωγή ετικετών HTML: <(\w+)[^>]*> αντιστοιχίζει ανοιγματικές ετικέτες συλλαμβάνοντας το όνομα στην Ομάδα 1.

Συμβουλές και Βέλτιστες Πρακτικές

Ξεκινήστε απλά και αυξήστε σταδιακά την πολυπλοκότητα. Γράψτε ένα βασικό μοτίβο που αντιστοιχίζει το κείμενο-στόχο σας, μετά προσθέστε περιορισμούς έναν-έναν. Η δοκιμή κάθε προσθήκης εξασφαλίζει ότι καταλαβαίνετε τι κάνει κάθε μέρος της έκφρασης σας. Χρησιμοποιείτε μη-συλλαμβάνουσες ομάδες (?:...) όταν χρειάζεστε ομαδοποίηση για εναλλαγή ή ποσοδείκτες αλλά δεν χρειάζεστε εξαγωγή περιεχομένου. Αυτό κρατάει καθαρή την αρίθμηση ομάδων. Να είστε συγκεκριμένοι με τις κλάσεις χαρακτήρων αντί να βασίζεστε στον μεταχαρακτήρα τελεία (.). Ένα μοτίβο όπως [a-zA-Z0-9] είναι πιο ακριβές από \w επειδή \w αντιστοιχίζει και κάτω παύλες. Η ειδικότητα μειώνει τα ψευδώς θετικά. Λαμβάνετε πάντα υπόψη ακραίες περιπτώσεις: κενές συμβολοσειρές, μόνο κενά, πολύ μεγάλη είσοδο και χαρακτήρες Unicode. Ενεργοποιείτε τη σημαία 'u' όταν δουλεύετε με κείμενο που μπορεί να περιέχει emojis. Αποφύγετε καταστροφικό backtracking μην φωλιάζοντας ποσοδείκτες μέσα σε άλλους (όπως μοτίβα (a+)+). Αυτά μπορούν να προκαλέσουν εκθετικό χρόνο εκτέλεσης.

Όλοι οι υπολογισμοί γίνονται τοπικά στο πρόγραμμα περιήγησής σας. Δεν αποστέλλονται δεδομένα σε κανέναν διακομιστή.

Ενσωμάτωση εργαλείου

Λήψη κώδικα

Συχνές ερωτήσεις

Τι σημαίνουν οι σημαίες regex;
g (global) βρίσκει όλες τις αντιστοιχίες, όχι μόνο την πρώτη. i (αδιάφορο πεζών-κεφαλαίων) αγνοεί διαφορές. m (πολλαπλές γραμμές) κάνει τα ^ και $ να αντιστοιχούν σε αρχές/τέλη γραμμών. s (dotAll) κάνει το . να αντιστοιχεί και σε αλλαγές γραμμής. u (unicode) ενεργοποιεί πλήρη υποστήριξη Unicode.
Πώς λειτουργούν οι ομάδες σύλληψης;
Οι παρενθέσεις ( ) δημιουργούν ομάδες σύλληψης που εξάγουν μέρη των αντιστοιχιών. Η ομάδα 0 είναι πάντα η πλήρης αντιστοίχιση, οι ομάδες 1+ είναι οι συλλήψεις σας με σειρά. Οι ονομασμένες ομάδες χρησιμοποιούν σύνταξη (?<όνομα>...). Οι μη-συλλαμβάνουσες ομάδες (?:...) ομαδοποιούν χωρίς σύλληψη.
Ποια είναι τα κοινά διαθέσιμα μοτίβα regex;
Η βιβλιοθήκη γρήγορων μοτίβων περιλαμβάνει έτοιμα μοτίβα για: διευθύνσεις email, URLs, αριθμούς τηλεφώνου, ημερομηνίες, διευθύνσεις IP, αριθμούς πιστωτικών καρτών, ταχυδρομικούς κώδικες, ονόματα χρηστών, κωδικούς πρόσβασης, χρώματα hex και ετικέτες HTML.
Πώς λειτουργεί η λειτουργία αντικατάστασης;
Ενεργοποιήστε τη λειτουργία Αντικατάστασης για δοκιμή μοτίβων υποκατάστασης. Χρησιμοποιήστε $1, $2, κλπ. για ομάδες σύλληψης, $& για την πλήρη αντιστοίχιση, $` για κείμενο πριν και $' για κείμενο μετά. Ονομασμένες ομάδες με $<όνομα>. Η προεπισκόπηση δείχνει το ακριβές αποτέλεσμα.
Θα λειτουργήσουν τα μοτίβα regex μου σε άλλες γλώσσες προγραμματισμού;
Αυτό το εργαλείο χρησιμοποιεί τη μηχανή RegExp της JavaScript, που μοιράζεται τη βασική σύνταξη με τις περισσότερες γλώσσες (κλάσεις χαρακτήρων, ποσοδείκτες, εναλλαγή, άγκυρες). Ωστόσο, ορισμένα χαρακτηριστικά διαφέρουν μεταξύ γλωσσών. Χαρακτηριστικά ειδικά της JavaScript όπως τα lookbehind assertions ή τα \p{} Unicode property escapes μπορεί να μην λειτουργούν πανομοιότυπα σε Python, Java ή PHP. Για διαγλωσσική συμβατότητα, χρησιμοποιήστε ευρέως υποστηριζόμενες κατασκευές.
Παραμένουν ιδιωτικά τα δεδομένα δοκιμής μου;
Ναι. Όλη η αντιστοίχιση και αντικατάσταση regex γίνεται αποκλειστικά στον browser σας χρησιμοποιώντας τον ενσωματωμένο κινητήρα RegExp της JavaScript. Κανένα μοτίβο ή συμβολοσειρά δοκιμής δεν αποστέλλεται ποτέ σε server. Αυτό καθιστά το εργαλείο ασφαλές για δοκιμή μοτίβων με ευαίσθητα δεδομένα όπως διευθύνσεις email, αρχεία καταγραφής ή ιδιόκτητο περιεχόμενο χωρίς κίνδυνο απορρήτου.