c regex tutorial regular expressions c with examples
Το σεμινάριο για τις κανονικές εκφράσεις C ++ ή το Regex εξηγεί την εργασία του regex στο C ++ συμπεριλαμβανομένης της λειτουργικότητας της αντιστοίχισης regex, της αναζήτησης, της αντικατάστασης, της επικύρωσης εισαγωγής και του tokenizing:
Η κανονική έκφραση ή τα regexes ή regexp όπως συνήθως ονομάζονται χρησιμοποιούνται για να αντιπροσωπεύουν ένα συγκεκριμένο μοτίβο συμβολοσειράς ή κειμένου. Τα Regexes χρησιμοποιούνται συχνά για να δηλώσουν μια τυπική σύνταξη κειμένου μιας συμβολοσειράς.
=> Επισκεφθείτε εδώ για να δείτε τη σειρά εκπαίδευσης C ++ για όλους.
Κάθε χαρακτήρας σε μια κανονική έκφραση έχει είτε έναν χαρακτήρα με κυριολεκτική έννοια είτε έναν 'μεταχαρακτήρα' που έχει ιδιαίτερη σημασία.
Για παράδειγμα , μια κανονική έκφραση 'a (a-z)' μπορεί να έχει τιμές 'aa', 'ab', 'ax' κλπ. Εδώ έχει μια κυριολεκτική έννοια και (a-z) υποδηλώνει οποιονδήποτε πεζά χαρακτήρα από a έως z.
Φυσικά, το παραπάνω παράδειγμα είναι το απλούστερο. Μπορούμε να έχουμε μια κανονική έκφραση με πιο περίπλοκα μοτίβα που ταιριάζουν.
Σχεδόν όλες οι γλώσσες προγραμματισμού παρέχουν υποστήριξη για regexes. Το C ++ έχει άμεση υποστήριξη για regexes από το C ++ 11 και μετά. Εκτός από τις γλώσσες προγραμματισμού, τα περισσότερα προγράμματα επεξεργασίας κειμένου όπως lexers, προηγμένοι επεξεργαστές κειμένου κ.λπ. χρησιμοποιούν regexes.
Σε αυτό το σεμινάριο, θα διερευνήσουμε τις λεπτομέρειες των regexes γενικά, καθώς και σε σχέση με τον προγραμματισμό C ++.
Τι θα μάθετε:
- Κανονική έκφραση (regex) σε C ++
- Πρότυπα συναρτήσεων που χρησιμοποιούνται στο C ++ regex
- Επικύρωση εισαγωγής C ++
- συμπέρασμα
Κανονική έκφραση (regex) σε C ++
Μια κανονική έκφραση ή regex είναι μια έκφραση που περιέχει μια ακολουθία χαρακτήρων που ορίζουν ένα συγκεκριμένο μοτίβο αναζήτησης που μπορεί να χρησιμοποιηθεί σε αλγόριθμους αναζήτησης συμβολοσειρών, εύρεση ή εύρεση / αντικατάσταση αλγορίθμων κ.λπ. Τα Regexes χρησιμοποιούνται επίσης για επικύρωση εισόδου.
Οι περισσότερες από τις γλώσσες προγραμματισμού παρέχουν είτε ενσωματωμένη δυνατότητα για regex είτε μέσω βιβλιοθηκών. Από το C ++ 11 και μετά, το C ++ παρέχει υποστήριξη regex μέσω της τυπικής βιβλιοθήκης μέσω της κεφαλίδας.
Ένας επεξεργαστής regex που χρησιμοποιείται για την ανάλυση ενός regex τον μεταφράζει σε μια εσωτερική αναπαράσταση που εκτελείται και αντιστοιχεί σε μια συμβολοσειρά που αντιπροσωπεύει το κείμενο που αναζητείται. Το C ++ 11 χρησιμοποιεί τη γραμματική ECMAScript ως προεπιλεγμένη γραμματική για το regex. Το ECMAScript είναι απλό, αλλά παρέχει ισχυρές δυνατότητες regex.
Ας δούμε μερικά από τα μοτίβα που καθορίζουμε σε regex όπως Range Specification, Repeat Patterns κ.λπ.
Προδιαγραφές εύρους
Ο καθορισμός μιας σειράς χαρακτήρων ή κυριολεκτικών είναι ένα από τα απλούστερα κριτήρια που χρησιμοποιούνται σε ένα regex.
Για παράδειγμα, μπορούμε να καθορίσουμε μια σειρά πεζών γραμμάτων από το α έως το ζ ως εξής:
(α-ζ)
Αυτό θα ταιριάζει ακριβώς με έναν πεζό χαρακτήρα.
Τα ακόλουθα κριτήρια,
(A-Za-z0-9)
Η παραπάνω έκφραση καθορίζει το εύρος που περιέχει έναν μόνο κεφαλαίο χαρακτήρα, έναν πεζό χαρακτήρα και ένα ψηφίο από 0 έως 9.
Οι αγκύλες (()) στις παραπάνω εκφράσεις έχουν μια ειδική έννοια, δηλαδή χρησιμοποιούνται για τον καθορισμό του εύρους. Εάν θέλετε να συμπεριλάβετε μια αγκύλη ως μέρος μιας έκφρασης, τότε θα πρέπει να την ξεφύγετε.
Έτσι, η ακόλουθη έκφραση,
( (0-9)
Η παραπάνω έκφραση υποδεικνύει μια αγκύλη ανοίγματος και ένα ψηφίο στην περιοχή 0 έως 9 ως regex.
Αλλά σημειώστε ότι καθώς προγραμματίζουμε το C ++, πρέπει να χρησιμοποιήσουμε τη συγκεκριμένη ακολουθία διαφυγής C ++ ως εξής:
(\ (0-9)
Επαναλαμβανόμενο μοτίβο
Τα παραδείγματα εύρους που έχουμε καθορίσει παραπάνω αντιστοιχούν μόνο σε έναν χαρακτήρα ή κυριολεκτικά. Αν θέλουμε να ταιριάξουμε περισσότερους από έναν χαρακτήρες, συνήθως ορίζουμε τον 'τροποποιητή έκφρασης' μαζί με το μοτίβο, κάνοντάς το έτσι επαναλαμβανόμενο μοτίβο.
Ένας τροποποιητής έκφρασης μπορεί να είναι '+' που προτείνει αντιστοίχιση της εμφάνισης ενός μοτίβου μία ή περισσότερες φορές ή μπορεί να είναι '*' που προτείνει αντιστοίχιση της εμφάνισης ενός μοτίβου μηδέν ή περισσότερες φορές.
Για παράδειγμα,η ακόλουθη έκφραση,
(a-z) + ταιριάζει με τις χορδές όπως a, aaa, abcd, softwaretestinghelp, κλπ. Σημειώστε ότι δεν θα ταιριάζει ποτέ με μια κενή συμβολοσειρά.
Η έκφραση,
(α-ζ) * θα ταιριάζει με μια κενή συμβολοσειρά ή οποιαδήποτε από τις παραπάνω συμβολοσειρές.
Εάν θέλετε να καθορίσετε μια ομάδα χαρακτήρων για αντιστοίχιση μία ή περισσότερες φορές, τότε μπορείτε να χρησιμοποιήσετε τις παρενθέσεις ως εξής:
(Xyz) +
Η παραπάνω έκφραση θα ταιριάζει με Xyz, XyzXyz και XyzXyzXyz κ.λπ.
Παράδειγμα C ++ regex
Εξετάστε μια κανονική έκφραση που ταιριάζει με ένα όνομα αρχείου MS-DOS όπως φαίνεται παρακάτω.
char regex_filename() = “(a-zA-Z_) (a-zA-Z_0-9)*\.(a-zA-Z0-9)+”;
Το παραπάνω regex μπορεί να ερμηνευθεί ως εξής:
Ταιριάξτε ένα γράμμα (πεζά και έπειτα κεφαλαία) ή μια υπογράμμιση. Στη συνέχεια, αντιστοιχίστε μηδέν ή περισσότερους χαρακτήρες, στους οποίους ο καθένας μπορεί να είναι ένα γράμμα, ή μια υπογράμμιση ή ένα ψηφίο. Στη συνέχεια, ταιριάξτε μια κυριολεκτική τελεία (.). Μετά την τελεία, αντιστοιχίστε έναν ή περισσότερους χαρακτήρες, στους οποίους ο καθένας μπορεί να είναι ένα γράμμα ή ψηφίο που δείχνει την επέκταση αρχείου.
Πρότυπα συναρτήσεων που χρησιμοποιούνται στο C ++ regex
Ας συζητήσουμε τώρα μερικά από τα σημαντικά πρότυπα λειτουργιών κατά τον προγραμματισμό του regex στο C ++.
regex_match ()
Αυτό το πρότυπο λειτουργίας χρησιμοποιείται για να ταιριάζει με το συγκεκριμένο μοτίβο. Αυτή η συνάρτηση επιστρέφει αληθινή εάν η δεδομένη έκφραση ταιριάζει με τη συμβολοσειρά Διαφορετικά, η συνάρτηση επιστρέφει false.
Ακολουθεί ένα παράδειγμα προγραμματισμού C ++ που δείχνει τη συνάρτηση regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Παραγωγή:

Στο παραπάνω πρόγραμμα, πρώτα, αντιστοιχίζουμε τη συμβολοσειρά 'softwareTesting' με την κανονική έκφραση '(' (soft) (. *) 'Χρησιμοποιώντας τη συνάρτηση regex_match. Στη συνέχεια, επιδεικνύουμε επίσης διαφορετικές παραλλαγές του regex_match μεταβιβάζοντάς το ένα αντικείμενο συμβολοσειράς, εύρος κ.λπ.
regex_search ()
Η συνάρτηση regex_search () χρησιμοποιείται για την αναζήτηση ενός μοτίβου στη συμβολοσειρά που ταιριάζει με την κανονική έκφραση.
Εξετάστε το ακόλουθο πρόγραμμα C ++ που δείχνει τη χρήση του regex_search ().
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s(a-z_)+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< Παραγωγή:

Καθορίζουμε μια συμβολοσειρά και μετά μια κανονική έκφραση χρησιμοποιώντας το αντικείμενο regex. Αυτή η συμβολοσειρά και το regex μεταβιβάζονται στη συνάρτηση regex_search μαζί με τον τύπο σημαίας smatch. Η συνάρτηση αναζητά την πρώτη εμφάνιση μοτίβου στη συμβολοσειρά εισόδου και επιστρέφει την αντιστοιχισμένη συμβολοσειρά.
regex_replace ()
Η συνάρτηση regex_replace () χρησιμοποιείται για να αντικαταστήσει το μοτίβο που ταιριάζει με μια κανονική έκφραση με μια συμβολοσειρά.
Ας χρησιμοποιήσουμε ένα πρόγραμμα C ++ για να δείξουμε τη συνάρτηση regex_replace ().
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Παραγωγή:

Εδώ, έχουμε μια συμβολοσειρά εισόδου. Παρέχουμε μια κανονική έκφραση για να ταιριάζει με μια συμβολοσειρά που ξεκινά με 'p'. Στη συνέχεια, αντικαθιστούμε την αντιστοιχισμένη λέξη με τη λέξη «ιστότοπος». Στη συνέχεια, αντικαθιστούμε τη λέξη «ιστότοπος» πίσω στην πύλη.
Επικύρωση εισαγωγής C ++
Έχουμε συζητήσει τα κύρια πρότυπα λειτουργιών που χρησιμοποιούνται για την αντιστοίχιση μοτίβων χρησιμοποιώντας regex. Είναι αξιοσημείωτο ότι ο κύριος σκοπός που εξυπηρετεί το regex είναι η επικύρωση εισόδου. Μπορείτε να επικυρώσετε την είσοδο που έχει εισαχθεί από μια τυπική συσκευή εισόδου χρησιμοποιώντας την έκφραση regex.
Ελέγξτε το παρακάτω πρόγραμμα για να δείξετε πώς μπορείτε να χρησιμοποιήσετε το regex για να επικυρώσετε τα εισερχόμενα δεδομένα.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?((:digit:))+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< Παραγωγή:

Αυτό το πρόγραμμα ταιριάζει με την είσοδο που εισήγαγε ο χρήστης για επικύρωση εάν είναι ακέραιος. Η παραπάνω έξοδος δείχνει ότι όταν εισάγεται ακέραιος, δίνει ένα κατάλληλο μήνυμα και όταν εισάγονται άλλα δεδομένα δίνει το μήνυμα ως μη έγκυρη είσοδο.
τι είναι ένας κωδικός κλειδιού ασφαλείας
συμπέρασμα
Το Regex χρησιμοποιείται στις μηχανές αναζήτησης για αναζήτηση μοτίβων, αναζήτηση και αντικατάσταση διαλόγων εφαρμογών όπως επεξεργαστές κειμένου και επεξεργαστές κειμένου. Το Regex χρησιμοποιείται επίσης σε βοηθητικά προγράμματα UNIX όπως sed, awk καθώς και λεξική ανάλυση του προγράμματος.
Έχουμε δει τις λειτουργίες που χρησιμοποιούνται για αντιστοίχιση, αναζήτηση και αντικατάσταση μοτίβων σε αυτό το σεμινάριο. Χρησιμοποιώντας αυτές τις λειτουργίες, μπορούμε βασικά να αναπτύξουμε μια αποτελεσματική εφαρμογή που υλοποιεί την επιθυμητή λειτουργικότητα χρησιμοποιώντας το regex.
Το Regex επιτρέπει την αποτελεσματική επικύρωση της εισόδου ή της αναζήτησης και την αντικατάσταση μιας συμβολοσειράς με μοτίβο επιδιόρθωσης και αυτό μπορεί να γίνει χρησιμοποιώντας πολύ λίγες γραμμές κώδικα C ++.
Διαβάστε επίσης => Εκμάθηση τακτικής έκφρασης Java
=> Δείτε ΟΛΟΥΣ τα μαθήματα C ++ εδώ.
Συνιστώμενη ανάγνωση
- MongoDB Regular Expression $ regex με Παράδειγμα
- Εκμάθηση Python DateTime με παραδείγματα
- Τρόπος χρήσης των τυπικών εκφράσεων Unix
- Εκμάθηση μήκους σειράς Java με παραδείγματα κώδικα
- Unix Shell Scripting Tutorial με παραδείγματα
- MongoDB Sharding Tutorial με Παράδειγμα
- Selenium Find Element By Text Tutorial με παραδείγματα
- Tutorial Unix Pipes: Pipes in Unix Programming