Αρχική σελίδα » Κωδικοποίηση » Οδηγός αρχαρίων για κανονική έκφραση (Regex)

    Οδηγός αρχαρίων για κανονική έκφραση (Regex)

    Μια κανονική έκφραση είναι ένα σύνολο χαρακτήρων που σχηματίζουν ένα πρότυπο που μπορεί να αναζητηθεί σε μια συμβολοσειρά. Το Regex μπορεί να χρησιμοποιηθεί για επικύρωση όπως για την επικύρωση αριθμών πιστωτικών καρτών, για Ψάξιμο δηλ. μέσω σύνθετων αντιστοιχιών κειμένου και για αντικατάσταση του αντιστοιχισμένου κειμένου με μια άλλη συμβολοσειρά. Έχει επίσης μεγάλη υποστήριξη πολλαπλών γλωσσών - μάθετε τη μία φορά και μπορείτε να την χρησιμοποιήσετε σε πολλές γλώσσες προγραμματισμού.

    Έχω δει λίγους ανθρώπους να ρίξουν μια πρώτη ματιά στο regex, και να το αγνοήσουν εντελώς. Δεν τους κατηγορώ? η σύνταξη του regex είναι πολύπλοκη και θα κάνει πολλούς να γκρεμίσουν όπως ακριβώς αυτές οι γλώσσες γραμμής εντολών, μόνο χειρότερα. Αλλά τότε κάθε νέο πράγμα είναι τρομακτικό και φαίνεται αδύνατο να μάθει πρώτα. Έτσι, δανείζοντας τα λόγια του Horatius θα το πω αυτό. Ξεκινήστε, να είστε τολμηροί, και να επιχειρήσετε να είστε σοφοί.

    Σχετικά με το Regex

    Το Regex είχε τις ρίζες του στη νευροεπιστήμη και τα μαθηματικά και εφαρμόστηκε μόνο στον προγραμματισμό το 1968 από τον Ken Thompson στον επεξεργαστή κειμένου QED για αναζήτηση κειμένου. Τώρα είναι μέρος πολλών προγραμματιστικών γλωσσών όπως το Perl, το Java, το Python, το Ruby και το JavaScript.

    Ας δούμε μερικά παραδείγματα για το πώς λειτουργεί το regex.

    Θα χρησιμοποιήσω το JavaScript στα παραδείγματα μου. Τώρα, για να περάσετε επίπεδο αρχαρίων, πρέπει να μάθετε όλα χαρακτήρες, τάξεις, ποσοτικοποιητές, τροποποιητές και μεθόδους που χρησιμοποιείται στο regex. Ακολουθεί μια σύνδεση με τη σελίδα Κανονικής έκφρασης του Mozilla Developer Network όπου μπορείτε να δείτε έναν πίνακα που περιέχει όλα αυτά. Μπορείτε επίσης να ανατρέξετε στο cheatsheet στο τέλος αυτής της ανάρτησης με τους περισσότερους χρησιμοποιημένους χαρακτήρες.

    Ας δούμε ένα απλό παράδειγμα με μια εξήγηση. Αυτό είναι ένα regex.

    Αυτό σημαίνει ότι το παραπάνω regex θα ψάξει σε μια γραμμή, έναν χαρακτήρα «Β» που θα ακολουθήσει τουλάχιστον ένας χαρακτήρας μεταξύ (και συμπεριλαμβανομένου) «a» με «z», «A» με «Z» και αριθμούς 0 έως 9.

    Ακολουθεί ένα δείγμα αγώνων σε μια γραμμή που επισημαίνεται:

    Καλάθι, βολβός, Β12 βιταμίνη, BaS04, Ν προ ΧΡΙΣΤΟΥ Εταιρία

    Το παραπάνω regex θα σταματήσει την αναζήτηση στο Καλάθι και να επιστρέψει μια θετική απάντηση. Αυτό επειδή ο γενικός τροποποιητής 'σολπρέπει να διευκρινιστεί αν θέλετε το regex να εξετάσει όλους τους πιθανούς αγώνες.

    Τώρα, ας δούμε πώς να χρησιμοποιήσουμε αυτήν την έκφραση στο JavaScript. ο δοκιμή η μέθοδος πηγαίνει: αν βρεθεί μια επιστροφή αγώνα αληθής, αλλού ψευδής.

     var input = "η δοκιμαστική σας συμβολοσειρά", regex = / B [a-zA-Z \ d] + /; αν (! regex.test (input)) alert ('Δεν βρέθηκε καμία αντιστοιχία'); else alert ('Βρέθηκε ένας αγώνας');

    Ας δοκιμάσουμε μια άλλη μέθοδο: αγώνας επιστρέφει τα αποτελέσματα που βρέθηκαν σε έναν πίνακα.

     var input = "test string", regex = / b [a-zA-Z \ d] + / g, / * Έχω προσθέσει τον γενικό τροποποιητή g στο regex για να πάρει όλους τους αγώνες * / ary = input.match (regex); αν (ary === null) alert ('Δεν βρέθηκε αντιστοιχία'); αλλιώς συναγερμός ("οι αγώνες είναι: '+ ary.toString ());

    Πόσο περίπου συμβολοσειρά αντικαθιστώ? Ας το δοκιμάσουμε με regex τώρα.

     var input = "η δοκιμαστική σας συμβολοσειρά", regex = / B [a-zA-Z \ d] + / g; ειδοποίηση (input.replace (regex, "#"));

    Παρακάτω είναι ένας κώδικας για να τροποποιήσετε. Κάντε κλικ στην καρτέλα "JavaScript" για να δείτε τον κώδικα JS.

    Γυμνάσια

    Για ασκήσεις, μπορείτε να κάνετε google “ασκήσεις regex” και προσπαθήστε να τα λύσετε. Εδώ είναι τι να περιμένετε όταν επιχειρείτε αυτές τις ασκήσεις, ανάλογα με τα επίπεδα δυσκολίας.

    Βασικός

    Για να είμαι σε θέση να επικυρώστε έναν κωδικό πρόσβασης είναι αρκετό για εκκινητές. Επομένως, επικυρώστε έναν κωδικό πρόσβασης για μήκος 8 έως 16 χαρακτήρων, αλφαριθμητικός με την επιλογή ειδικών χαρακτήρων που επιτρέπεται.

    Ενδιάμεσος

    Αυτό είναι όπου θα πρέπει να εξασκηθείτε με περισσότερα στοιχεία του πραγματικού κόσμου και να μάθετε μερικά ακόμη σημεία regex όπως lookahead, lookbehind ισχυρισμοί και αντίστοιχες ομάδες.

    • Επαληθεύστε τους κωδικούς PIN, τα δεκαδικά ψηφία, τις ημερομηνίες, το αναγνωριστικό email, το κινητό σημείο.
    • Αντικαταστήστε το μηδέν που βρίσκεται στο τέλος, τους λευκούς χώρους, ένα σύνολο λέξεων που ταιριάζουν
    • Εξαγωγή διαφορετικών τμημάτων μιας διεύθυνσης URL

    Προχωρημένος

    Μπορείτε να βελτιστοποιήσετε τις λύσεις των παραπάνω ασκήσεων - το πιο βέλτιστο regex για το ηλεκτρονικό ταχυδρομείο έχει χιλιάδες χαρακτήρες σε αυτό - έτσι πάρτε το μέχρι να αισθανθείτε άνετα και αυτό είναι αρκετό. Μπορείτε επίσης να δοκιμάσετε:

    • Αναλύοντας HTML ή XML (αν και στον πραγματικό κόσμο αποθαρρύνεται να το πράξει, επειδή η χρήση της κανονικής έκφρασης για την ανάλυση μη γραμμικής γλώσσας, όπως HTML, δεν θα το κάνει ποτέ αλάνθαστο.) Η συνδιάταξη XML είναι μια δύσκολη εργασία, πιο κατάλληλη για τους προχωρημένους χρήστες)
    • Αντικατάσταση ετικετών
    • Κατάργηση σχολίων (εκτός από τα σχόλια υπό όρους)

    Εργαλεία

    Εργαλεία για απεικονίζουν το regex είναι ένα από τα πιο ωραία πράγματα εκεί έξω για μένα. Εάν συναντήσετε ποτέ ένα μακρύ σύνθετο regex, απλά αντιγράψτε τα επικολλήστε σε ένα από αυτά τα εργαλεία και θα μπορείτε να δείτε τη ροή καθαρά. Εκτός αυτού, υπάρχουν πολλά εργαλεία που μπορείτε να χρησιμοποιήσετε για να τρέξετε με τον κώδικα regex. Παρουσιάζουν επίσης παραδείγματα και cheatsheets μαζί με χαρακτηριστικά κοινής χρήσης.

    • Debuggex - Σχεδιάζει ένα διάγραμμα regex σύμφωνα με την είσοδο σας και μπορείτε να κάνετε μια γρήγορη κοινή χρήση του StackOverflow από εκεί.
    • RegExr - Μπορείτε να δοκιμάσετε το regex με αυτό το. Έχει επίσης αναφορές, ένα cheatsheet και παραδείγματα για να σας βοηθήσουν.
    • Refiddle - Αυτή τη στιγμή, εκτός από το JavaScript, μπορείτε επίσης να μετακομίσετε με τις εκδόσεις Ruby και .NET του regex σε αυτό.

    Regex Cheatsheet

    Ενδειξη Ορισμός
    [αλφάβητο] Κάθε χαρακτήρας a, b ή c
    [^ abc] Κάθε χαρακτήρας εκτός από a, b ή c
    [a-z] Χαρακτήρας μεταξύ (συμπεριλαμβανομένου) α έως ζ
    [^ a-z] Χαρακτήρας εκτός από a έως z
    [A-Z] Χαρακτήρας μεταξύ (συμπεριλαμβανομένου) Α έως Ζ
    . Οποιοσδήποτε χαρακτήρας
    \μικρό Οποιοσδήποτε χαρακτήρας
    \ΜΙΚΡΟ Οποιοσδήποτε χαρακτήρας που δεν έχει κενό
    \ρε Οποιοδήποτε ψηφίο 0 έως 9
    \ΡΕ Οποιοδήποτε μη ψηφίο
    \ w Οποιοσδήποτε χαρακτήρας λέξης (γράμμα, αριθμός & υπογράμμιση)
    \ W Οποιοσδήποτε χαρακτήρας δεν είναι λέξη
    (...) Καταγράψτε τα πάντα
    (α | β) Ταίριασμα είτε a είτε b
    ένα? Ο χαρακτήρας α απουσιάζει ή είναι παρών μία φορά
    ένα* Ο χαρακτήρας α απουσιάζει ή παρουσιάζεται περισσότερες φορές
    ένα+ Ο χαρακτήρας a είναι παρών μία ή περισσότερες φορές
    ένα 3 3 εμφανίσεις του χαρακτήρα διαδοχικά
    α 3, 3 ή περισσότερες εμφανίσεις χαρακτήρα διαδοχικά
    α 3,6 3 έως 6 εμφανίσεις χαρακτήρα διαδοχικά
    ^ Έναρξη της συμβολοσειράς
    $ Τέλος της συμβολοσειράς
    \σι Ένα όριο λέξης. Αν ένας χαρακτήρας είναι ο τελευταίος ή ο πρώτος χαρακτήρας λέξης μιας λέξης ή Αν ένας χαρακτήρας είναι μεταξύ ενός χαρακτήρα λέξης ή μη λέξης
    \ΣΙ Όριο χωρίς λέξεις

    Τώρα Διαβάστε: Κανονικές εκφράσεις: 30 χρήσιμα εργαλεία και πόροι