Δοκιμαστής Regex

Διαφήμιση

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

/ /
Γρήγορα Μοτίβα
Κείμενο Δοκιμής
Αντιστοιχίες
Διαφήμιση

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

Οι κανονικές εκφράσεις έχουν τις ρίζες τους στο 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+)+). Αυτα μπορουν να προκαλεσουν εκθετικο χρονο εκτελεσης.

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

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

Λήψη κώδικα

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

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

Τι σημαίνουν οι σημαίες 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, αρχεία καταγραφής ή ιδιόκτητο περιεχόμενο χωρίς κίνδυνο απορρήτου.