Αντικατάσταση χαρακτήρων php τυπικών εκφράσεων. Κανονικές εκφράσεις PHP. Εξαιρούμενες κατηγορίες χαρακτήρων

Η PHP, όπως αρμόζει σε μια σύγχρονη γλώσσα προγραμματισμού, προσφέρει στον προγραμματιστή ένα σύνολο λειτουργιών για τη χρήση κανονικών εκφράσεων. Μπορείτε να αναζητήσετε εμφανίσεις συμβολοσειρών σε άλλες συμβολοσειρές χρησιμοποιώντας πολύπλοκα κριτήρια.

  • PREG_PATTERN_ORDER;
  • PREG_SET_ORDER.

Ταξινόμηση κατά Επιλογή 1 ομαδοποιεί τα αποτελέσματα αναζήτησης κατά αριθμό τυπικής έκφρασης (η προεπιλογή). Στη δεύτερη περίπτωση, τα αποτελέσματα ομαδοποιούνται με βάση τη θέση τους στη σειρά.

Σύμβολο - στοιχείο προτύπου

Είναι σημαντικό να θυμάστε ότι το πρότυπο λειτουργεί με σύμβολα. Ο προγραμματισμός έχει από καιρό ξεχάσει ποιος είναι ο τύπος δεδομένων "χαρακτήρα". Οι σύγχρονες γλώσσες δεν υποχωρούν από την έννοια της "χορδής", αλλά όσον αφορά το μοτίβο, πρέπει να καταλάβετε: τα σύμβολα χειραγωγούνται εδώ.

Η κατασκευή ενός προτύπου είναι, πρώτα απ 'όλα, ο καθορισμός της απαιτούμενης ακολουθίας χαρακτήρων. Εάν το καταλαβαίνετε ξεκάθαρα, τότε δεν θα υπάρχουν σφάλματα στο πρότυπο. Σε κάθε περίπτωση, θα είναι πολύ λιγότερο.

  • Το a είναι ένα συγκεκριμένο στοιχείο του προτύπου - ένα σύμβολο.
  • Το a-z είναι ένα στοιχείο προτύπου, επίσης ένας χαρακτήρας, αλλά μόνο με την τιμή από το a έως το z - όλα λατινικά με πεζά.
  • Το 0-9 είναι ένας αριθμός, οποιοσδήποτε αριθμός, αλλά το 1-3 είναι μόνο 1, 2 ή 3.

Η υπόθεση στο μοτίβο είναι σημαντική. Ο πρώτος και ο τελευταίος χαρακτήρες του μοτίβου είναι σημαντικοί. Μπορείτε να καθορίσετε πού ξεκινά και πού τελειώνει το πρότυπο.

Πρότυπο συνάρτησης

Το PHP preg match all χρησιμοποιεί τυπική σύνταξη τυπικών εκφράσεων. υποδεικνύουν ένα από τα σύμβολα που υποδεικνύονται σε αυτά:

  • μόνο χαρακτήρες α, β, γ.
  • [^ABC] τα πάντα εκτός από τους χαρακτήρες A, B, C.
  • \w και \W - χαρακτήρας κειμένου ή μη κειμένου.
  • \s και \S - χαρακτήρας κενού ή μη κενού διαστήματος.
  • \d και \D - ψηφίο ή μη.

Οι επαναλαμβανόμενοι χαρακτήρες υποδεικνύονται με σγουρά άγκιστρα - (n,m) και αναφέρονται στον προηγούμενο χαρακτήρα.

  • n υποδηλώνει επανάληψη του "όχι λιγότερο από"?
  • m - επανάληψη του "όχι άλλο".

Η σύνταξη παρέχει πολλές επιλογές για τη δημιουργία προτύπων, αλλά είναι καλύτερο να ξεκινήσετε με τα βασικά, δηλαδή με απλά γραμμένα στο χέρι σας, στα οποία απουσιάζουν πολύπλοκα στοιχεία και συνδυασμοί.

Με απλά λόγια, αναφέροντας τους πραγματικούς χαρακτήρες που χρειάζονται, υποδεικνύοντας τις απαιτούμενες ποσότητες και λαμβάνοντας υπόψη ότι ο χαρακτήρας «^» αντιστοιχεί στην αρχή και «$» στο τέλος της γραμμής, μπορείτε να δημιουργήσετε απλά πρότυπα. Αναλύοντας πραγματικές, καλά διορθωμένες κανονικές εκφράσεις από εξειδικευμένους ειδικούς, μπορείτε να αποκτήσετε στέρεες γνώσεις για τη δημιουργία σύνθετων εφαρμογών preg match all. Το οπλοστάσιο της PHP δεν περιορίζεται μόνο σε αυτές τις δύο λειτουργίες, αλλά είναι οι πιο συχνά χρησιμοποιούμενες.

Απλή πρακτική

Ακέραιο μοτίβο:

  • "/*/"

Επίσης ένα μοτίβο ακέραιου αριθμού, αλλά μπορεί να υπάρχει ένα σημάδι μπροστά ("+", "-") και μπορεί να υπάρχουν επιπλέον κενά μπροστά/πίσω:

  • /^[\s|\+|\-](0,1)*/

Επίσης:

  • /^[\s|\+|\-](0,1)*(\.)*/ - αριθμός με τελεία.
  • /+@+\.(2,3)/ - επιλογή για αναγνώριση e-mail.

Η χρήση των δικών σας προτύπων για το preg match όλα, παραδείγματα αυτών στο Διαδίκτυο, η ανάλυση του κώδικα σελίδων ιστότοπου και άλλων πηγών σάς επιτρέπει να δημιουργήσετε τη δική σας βιβλιοθήκη προτύπων.

Υπάρχουν πολλές επιλογές για την εύρεση πληροφοριών. Συγκεκριμένα, οι δύο τελευταίες κατασκευές που δίνονται παραπάνω μπορούν να μοντελοποιηθούν διαφορετικά. Σε πολλές περιπτώσεις, θα προτιμάται το πρότυπο που παρέχει την επιθυμητή αντιστοίχιση πιο γρήγορα και με μεγαλύτερη ακρίβεια. Η χρήση του preg match all στην PHP, καθώς και παρόμοιων λειτουργιών σε άλλες γλώσσες, απαιτεί εξάσκηση, προσοχή και προκαταρκτικό έλεγχο της ορθότητας των προτύπων.

Αυτό το άρθρο παρέχει μια επιλογή παραδειγμάτων php regexp. Μια πολύ ωραία και χρήσιμη συλλογή από παραδείγματα κανονικής έκφρασης. Όλα τα παραδείγματα τυπικών εκφράσεων είναι αποδεκτά για PHP. Απολαύστε το για την υγεία σας!

Παράδειγμα επαλήθευσης ονόματος τομέα

Αυτό το απόσπασμα php ελέγχει αν η συμβολοσειρά είναι έγκυρο όνομα τομέα.

?:.*)+):?(d+)?/?/i", $url)) ( echo "Το url σας είναι εντάξει."; ) else ( echo "Λάθος url."; )

Παράδειγμα επισήμανσης μιας λέξης σε κείμενο

Μια πολύ χρήσιμη τυπική έκφραση για αναζήτηση και επισήμανση της επιθυμητής λέξης στο κείμενο. Ο κώδικας είναι ιδιαίτερα χρήσιμος όταν δημιουργείτε αποτελέσματα αναζήτησης.

$text = "Δείγμα πρότασης από το KomunitasWeb, το regex έχει γίνει δημοφιλές στον προγραμματισμό ιστού. Τώρα μαθαίνουμε το regex. Σύμφωνα με τη wikipedia, οι κανονικές εκφράσεις (συντομευμένες ως regex ή regexp, με πληθυντικούς τύπους regex, regexps ή regexen) γράφονται σε τυπικό γλώσσα που μπορεί να ερμηνευτεί από έναν επεξεργαστή κανονικών εκφράσεων". $text = preg_replace("/b(regex)b/i", " 1", $text); echo $text;

Ένα παράδειγμα εφαρμογής της επισήμανσης των αποτελεσμάτων αναζήτησηςWordPress

Ανοίξτε το αρχείο search.php και βρείτε τη συνάρτηση the_title(). Αντικαταστήστε το με την ακόλουθη γραμμή:

Echo $title;

Τώρα, πριν από τη γραμμή που αντικαταστάθηκε, εισαγάγετε αυτόν τον κωδικό:

\0", $title); ?>

Αποθηκεύστε το αρχείο search.php και ανοίξτε το style.css. Προσθέστε την ακόλουθη γραμμή σε αυτό:

Strong.search-απόσπασμα ( φόντο: κίτρινο; )

Ένα παράδειγμα λήψης εικόνων απόΜέθοδος HTML regexp

Αυτό το κομμάτι κώδικα PHP χρησιμοποιώντας κανονικές εκφράσεις αναζητά όλες τις εικόνες και το url τους.

$images = array(); preg_match_all("/(img|src)=("|")[^"">]+/i", $data, $media); unset($data); $data=preg_replace("/(img|src)("|"|="|=")(.*)/i","$3",$media); foreach($data ως $url) ( $info = pathinfo($url); if (isset($info["επέκταση"])) (if (($info["επέκταση"] == "jpg") || ($info["επέκταση"] == "jpeg") || ($info["επέκταση"] == "gif") || ($info["επέκταση"] == "png")) array_push($ εικόνες, $url); ))

Κατάργηση διπλότυπων λέξεων (χωρίς διάκριση πεζών-κεφαλαίων)

Υπάρχουν συχνά λέξεις που επαναλαμβάνονται; Τότε αυτό το παράδειγμα τυπικής έκφρασης θα σας φανεί χρήσιμο.

$text = preg_replace("/s(w+s)1/i", "$1", $text);

Αφαίρεση διπλών σημείων

Το ίδιο, μόνο με επαναλαμβανόμενα σημεία.

$text = preg_replace("/.+/i", ".", $text);

Αντιστοίχιση ετικετών XML/HTML

Αυτή η απλή συνάρτηση παίρνει δύο ορίσματα: μια ετικέτα (που θέλετε να αντιστοιχίσετε), xml ή κώδικα html.

Συνάρτηση get_tag($tag, $xml) ( $tag = preg_quote($tag); preg_match_all("(<".$tag."[^>]*>(.*?).")", $xml, $matches, PREG_PATTERN_ORDER); επιστροφή $match; )

Αναζητήστε ετικέτες XHTML/XML με συγκεκριμένες τιμές χαρακτηριστικών

Αυτό το παράδειγμα είναι παρόμοιο με την προηγούμενη λειτουργία, μόνο που μπορείτε να επεκτείνετε σημαντικά την αναζήτηση, για παράδειγμα εύρεση

.

Συνάρτηση get_tag($attr, $value, $xml, $tag=null) ( if(is_null($tag)) $tag = "\w+"; else $tag = preg_quote($tag); $attr = preg_quote($ attr); $value = preg_quote($value); $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". "(["\"])$value\\2[^>]*>(.*?)<\/\\1>/" preg_match_all($tag_regex, $xml, $matches, PREG_PATTERN_ORDER); επιστροφή $matches; )

Εύρεση δεκαεξαδικών τιμών χρώματος

Ένα εξαιρετικό παράδειγμα κανονικής έκφρασης που ταιριάζει με δεκαεξαδικές τιμές χρώματος σε δεδομένες συμβολοσειρές. Σε τι χρησιμεύει αυτό; Ίσως θέλετε να γράψετε μια υπηρεσία συμπίεσης κώδικα CSS ή κάτι παρόμοιο.

$string = "#555555"; if (preg_match("/^#(?:(?:(3))(1,2))$/i", $string)) (echo "παράδειγμα 6 επιτυχές."; )

Παράδειγμα αναζήτησηςτίτλο σε μια δεδομένη σελίδα

Αυτό το ενδιαφέρον παράδειγμα κώδικα PHP με regexp βρίσκει και επιστρέφει κείμενο μεταξύ ετικετών Και.

Feof($fp))( $page .= fgets($fp, 4096); ) $titre = eregi(" (.*)",$page,$regs); echo $regs; fclose($fp);

Ανάλυση καταγραφής Apache

Οι περισσότεροι ιστότοποι τρέχουν σε γνωστούς διακομιστές Apache. Εάν ο ιστότοπός σας εκτελείται επίσης σε αυτόν, τότε μπορείτε να αναλύσετε το αρχείο καταγραφής διακομιστή χρησιμοποιώντας php regexp.

//Καταγραφή: Διακομιστής ιστού Apache //Επιτυχημένες επισκέψεις μόνο σε αρχεία HTML. Χρήσιμο για την καταμέτρηση του αριθμού των προβολών σελίδας. "^((?#πελάτης IP ή όνομα τομέα)S+)s+((?#βασικός έλεγχος ταυτότητας)S+s+S+)s+[((?#ημερομηνία και ώρα)[^]]+)]s+"(?: GET|POST|HEAD) ((?#αρχείο)/[^ ?]+?.html?)??((?#parameters)[^ ?]+)? HTTP/+"s+(?#κωδικός κατάστασης)200s+((?#bytes μεταφέρθηκαν)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$" //Καταγραφή: Διακομιστής ιστού Apache //404 μόνο σφάλματα "^((?# IP πελάτη ή όνομα τομέα)S+)s+((?#βασικός έλεγχος ταυτότητας)S+s+S+) s+[((?#ημερομηνία και ώρα)[^]]+]s+"(?:GET|POST|HEAD) ((?#αρχείο)[^ ?"]+)??((?#parameters)[ ^ ?"]+)? HTTP/+"s+(?#κωδικός κατάστασης)404s+((?#bytes μεταφέρθηκαν)[-0-9]+)s+"((?#referrer)[^"]*)"s+"((?#user agent )[^"]*)"$"

Παράδειγμα ελέγχου πολυπλοκότητας κωδικού πρόσβασης

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

"A(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?)(?=[-_a-zA-Z0-9]*?) [-_a-zA-Z0-9](6,)z"

Αντικατάσταση emoticon κειμένου με γραφικά emoticon

Αυτό το παράδειγμα κώδικα θα αλλάξει το εικονίδιο emoticon κειμένου στο γραφικό σας. Ενδιαφέρον και χρήσιμο απόσπασμα PHP.

$texte="Ένα κείμενο με χαμόγελο:-)"; echo str_replace(":-)"," ",$texte);

Παράδειγμα κανονικής έκφρασης για λήψη εικόνωνκώδικας html

Αξίζει να πούμε ότι αυτός ο κώδικας php χρησιμοποιείται στο wordpress για αναζήτηση και επεξεργασία εικόνων.

post_content; $szSearchPattern = "~ ]* />~"; // Εκτελέστε το preg_match_all για να τραβήξετε όλες τις εικόνες και να αποθηκεύσετε τα αποτελέσματα στο $aPics preg_match_all($szSearchPattern, $szPostContent, $aPics); // Ελέγξτε αν έχουμε τουλάχιστον 1 εικόνα $iNumberOfPics = count($aPics); if ($iNumberOfPics > 0) ( // Εδώ μπορείτε να επεξεργαστείτε τις εικόνες σας // Σε αυτό το παράδειγμα, απλώς θα εμφανίζονται στην οθόνη για ($i=0; $i< $iNumberOfPics ; $i++) { echo $aPics[$i]; }; }; endwhile; endif; ?>

Ελπίζω να βρήκατε χρήσιμη αυτή τη συλλογή παραδειγμάτων php regexp. Εάν υπάρχουν ενδιαφέρουσες προσθήκες ή παραδείγματα κανονικών εκφράσεων (php), γράψτε στα σχόλια.

Περιγραφή λειτουργίας:

Η συνάρτηση preg_replace αναζητά αντιστοιχίσεις μιας κανονικής έκφρασης (μοτίβο) με δεδομένα σε μια συμβολοσειρά (θέμα) και τα αντικαθιστά με τα δεδομένα που βρέθηκαν στην αντικατάσταση.

Διαφωνία

Περιγραφή

πρότυπο

Απαιτούμενο επιχείρημα.Κανονική έκφραση (μοτίβο αναζήτησης)

συμβολοσειρά, πίνακας

αντικατάσταση

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

Μπορείτε επίσης να χρησιμοποιήσετε μια κατασκευή της μορφής \$(1) για συνδέσμους, η οποία ισοδυναμεί με \$1· αυτή η κατασκευή χρησιμοποιείται εάν ο σύνδεσμος ακολουθείται αμέσως από έναν αριθμό (\$(1)1).

συμβολοσειρά, πίνακας
θέμα Απαιτούμενο επιχείρημα.Μια συμβολοσειρά ή πίνακας που περιέχει τα δεδομένα που θα αντικατασταθούν. συμβολοσειρά, πίνακας
όριο

Προαιρετικό επιχείρημα.Μέγιστος αριθμός αντικαταστάσεων. Η προεπιλογή είναι -1 (απεριόριστο)

ενθ
μετρώ

Προαιρετικό επιχείρημα.Μια μεταβλητή που περιέχει τον αριθμό των αντικαταστάσεων που έγιναν.

ενθ

Η συνάρτηση preg_replace() μπορεί να χρησιμοποιηθεί με τον τροποποιητή /e. Όταν υπάρχει αυτός ο τροποποιητής, η παράμετρος αντικατάστασης ερμηνεύεται ως κώδικας PHP και στη συνέχεια χρησιμοποιείται για αντικατάσταση.

Κανονικές εκφράσεις

Ξεχωριστά, θα πρέπει να σταθούμε σε κανονικές εκφράσεις, χωρίς κατανόηση των οποίων είναι αρκετά δύσκολο (αν όχι αδύνατο) να κατανοήσουμε το έργο της συνάρτησης preg_replace().

Μια αρκετά καλή περιγραφή των κανονικών εκφράσεων δίνεται στο wikipedia.org, περιγράφονται επίσης τα κύρια σημεία χρήσης κανονικών εκφράσεων

Παραδείγματα:

Παράδειγμα 1:

Σε αυτό το παράδειγμα, αντικαθιστούμε όλους τους αριθμούς που βρίσκονται σε αγκύλες με αστερίσκους.

Παράδειγμα 2:

Σε αυτό το παράδειγμα, αντικαθιστούμε τη συμβολοσειρά που αντιστοιχεί σε ολόκληρο το μοτίβο με τα δεδομένα που αντιστοιχούν στο πρώτο υπομοτίβο στην αναφορά \$1. Με άλλα λόγια, το "έχουν 3 μήλα" που αντιστοιχούν στο "/(\w+) (\d+) (\w+)/" θα αντικατασταθεί από το "έχουν" που αντιστοιχεί στο (\w+).

Παράδειγμα 3:

Αυτό το παράδειγμα δείχνει τι συμβαίνει εάν χρησιμοποιείτε πίνακες ως μοτίβο και αντικατάσταση.

Παράδειγμα 4:

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

Παράδειγμα 5:

Αυτό το παράδειγμα δείχνει τη χρήση του τροποποιητή /e, δηλαδή όταν η αντικατάσταση ερμηνεύεται ως κώδικας php. Ακολουθεί η μετατροπή των χαρακτήρων από πεζό σε κεφαλαίο.

Παράδειγμα 6:

Αυτό το παράδειγμα δείχνει τη χρήση του ορίσματος count. Εδώ το αποτέλεσμα θα είναι ίσο με 2, άρα υπήρξαν δύο αντικαταστάσεις.

μικτός preg_match(μοτίβο συμβολοσειράς, θέμα συμβολοσειράς [, πίνακας &ταιριάζει [, σημαίες int [, μετατόπιση int]]])

Αναζητά το δεδομένο θέμα κειμένου για αντιστοιχίες με το μοτίβο του μοτίβου

Εάν έχει καθοριστεί η πρόσθετη παράμετρος αντιστοιχίσεων, θα συμπληρωθεί με αποτελέσματα αναζήτησης. Το στοιχείο $matches θα περιέχει το τμήμα της συμβολοσειράς που ταιριάζει με ολόκληρο το μοτίβο, το $matches θα περιέχει το τμήμα της συμβολοσειράς που ταιριάζει με το πρώτο υπομοτίβο και ούτω καθεξής.

Οι σημαίες μπορούν να λάβουν τις ακόλουθες τιμές:

PREG_OFFSET_CAPTURE

Εάν αυτή η σημαία έχει καθοριστεί, για κάθε υποσυμβολοσειρά που βρέθηκε θα υποδεικνύεται η θέση της στη συμβολοσειρά πηγής. Είναι σημαντικό να θυμάστε ότι αυτή η σημαία αλλάζει τη μορφή των δεδομένων που επιστρέφονται: κάθε εμφάνιση επιστρέφεται ως πίνακας, το μηδενικό στοιχείο του οποίου περιέχει την υποσυμβολοσειρά που βρέθηκε και το πρώτο στοιχείο περιέχει τη μετατόπιση. Αυτή η σημαία είναι διαθέσιμη σε PHP 4.3.0 και νεότερη έκδοση.

Η πρόσθετη παράμετρος flags είναι διαθέσιμη από την PHP 4.3.0.

Η αναζήτηση πραγματοποιείται από αριστερά προς τα δεξιά, από την αρχή της γραμμής. Η προαιρετική παράμετρος μετατόπισης μπορεί να χρησιμοποιηθεί για τον καθορισμό μιας εναλλακτικής αρχικής θέσης για την αναζήτηση. Η πρόσθετη παράμετρος offset είναι διαθέσιμη από την PHP 4.3.3.

Σχόλιο:Η χρήση της παραμέτρου offset δεν ισοδυναμεί με την αντικατάσταση της αντιστοιχισμένης συμβολοσειράς με substr($subject, $offset) κατά την κλήση της συνάρτησης preg_match_all(), καθώς το μοτίβο μπορεί να περιέχει συνθήκες όπως ^ , $ ή (? . Συγκρίνω:

Ενώ αυτό το παράδειγμα

Λειτουργία preg_match()επιστρέφει τον αριθμό των αντιστοιχιών που βρέθηκαν. Μπορεί να είναι 0 (δεν βρέθηκαν αντιστοιχίες) και 1 επειδή preg_match()σταματά να λειτουργεί μετά το πρώτο ταίρι που βρέθηκε. Εάν πρέπει να βρείτε ή να μετρήσετε όλες τις αντιστοιχίσεις, θα πρέπει να χρησιμοποιήσετε τη συνάρτηση preg_match_all(). Λειτουργία preg_match()επιστρέφει ΨΕΥΔΗΣσε περίπτωση που παρουσιαστούν σφάλματα κατά την εκτέλεση.

Ενδειξη:Μην χρησιμοποιείτε τη λειτουργία preg_match(), εάν πρέπει να ελέγξετε για την παρουσία μιας υποσυμβολοσειράς σε μια δεδομένη συμβολοσειρά. Χρησιμοποιήστε για αυτό strpos()ή strstr(), αφού θα ολοκληρώσουν αυτή την εργασία πολύ πιο γρήγορα.


Παράδειγμα 2. Αναζητήστε τη λέξη «ιστός» στο κείμενο

/*
Η ειδική ακολουθία \b στο μοτίβο σημαίνει ένα όριο λέξης,
Επομένως, μόνο μια μεμονωμένη εμφάνιση της λέξης "ιστός" θα ταιριάζει
μάσκα, σε αντίθεση με τον «ιστό» ή τον «ιστό αράχνης».
*/
if (preg_match("/\bweb\b/i" , "Η PHP είναι η γλώσσα δέσμης ενεργειών ιστού της επιλογής.")) {
ηχώ "Η καταχώριση βρέθηκε.";
) άλλο (
ηχώ "Δεν βρέθηκε καταχώρηση.";
)preg_match ("/\bweb\b/i" , "Η PHP είναι η γλώσσα δέσμης ενεργειών του ιστότοπου της επιλογής.")) {
ηχώ "Η καταχώριση βρέθηκε.";
) άλλο (
ηχώ "Δεν βρέθηκε καταχώρηση.";
}
?>

Ήθελα να καταλάβω τις κανονικές εκφράσεις εδώ και πολύ καιρό. Αν και το «κατάλαβε το» είναι μια δυνατή λέξη. Για να κατακτήσετε τη σπουδαία τέχνη του να γίνετε κύριος των κανονικών εκφράσεων, πρέπει να εργάζεστε συνεχώς μαζί τους. Δεν αρκεί να μάθετε τη σύνταξη, τους ειδικούς χαρακτήρες και τους τροποποιητές - πρέπει να μπορείτε να τα χρησιμοποιήσετε. Και η δυνατότητα χρήσης συνοδεύεται από εμπειρία.

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

Πίνακας ειδικών χαρακτήρων

ΕΙΔΙΚΟΣ ΧΑΡΑΚΤΗΡΑΣ Περιγραφή
\ Σύμβολο διαφυγής. Παράδειγμα: '/seo\/smo/'- ταιριάζει με τη γραμμή που περιέχει seo/smo.
^ Έναρξη του συμβόλου δεδομένων. Παράδειγμα: '/^seo/'— ταιριάζει με μια γραμμή που αρχίζει με τη λέξη seo.
$ Σύμβολο τέλους δεδομένων. Παράδειγμα: '/blog$/'— ταιριάζει με μια γραμμή που τελειώνει με τη λέξη blog.
. Οποιοσδήποτε χαρακτήρας εκτός από τη ροή γραμμής. Παράδειγμα: "/seo.ult/"- ταιριάζει με το string seopult, seo9ult, seo@ult, κ.λπ.
Μέσα σε αυτές τις αγκύλες παρατίθενται χαρακτήρες, οποιοσδήποτε από τους οποίους μπορεί να εμφανιστεί σε μια δεδομένη θέση, αλλά μόνο ένας. Παράδειγμα: «/seoult/»— θα αντιστοιχιστούν μόνο γραμμές που περιέχουν seopult, seokult ή seomult.
| Ή. Παράδειγμα παρακάτω.
() Υπομάσκα.
? Μία ή μηδενική εμφάνιση του προηγούμενου χαρακτήρα ή υπομοτίβου.
* Οποιοσδήποτε αριθμός εμφανίσεων του προηγούμενου χαρακτήρα ή υπομοτίβου. Συμπεριλαμβανομένου του μηδενός.
+ Ένα ή περισσότερα περιστατικά.
Παράδειγμα: '/se+(op|om)?.*t/'- το γράμμα s, μετά ένα ή περισσότερα γράμματα e, μετά τα οποία ο συνδυασμός op ή om μπορεί να εμφανιστεί μία φορά, ή ίσως όχι μία, μετά οποιοσδήποτε αριθμός συμβόλων και το γράμμα t.
(α, β) Ο αριθμός των εμφανίσεων του προηγούμενου χαρακτήρα ή υπομοτίβου από το a έως το b. Παράδειγμα: (0,) - το ίδιο με *, (0,1) - το ίδιο με το ?, (3,5) - 3, 4 ή 5 επαναλήψεις.

Απλά παραδείγματα σεναρίων PHP που χρησιμοποιούν κανονικές εκφράσεις:

1) Προηγούμενες και επόμενες εκφράσεις.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // βρείτε μια λέξη στην οποία το ing να έρχεται μετά το Box. Εάν βρεθεί η λέξη, η συνάρτηση θα επιστρέψει true, αν όχι, false.$pattern1 = "/Box(?=ing)/" ; preg_match($pattern1, "Box Day"); // false preg_match ($pattern1, "Boxing Day" ); // αληθές // βρείτε μια λέξη που δεν έχει ing μετά το πλαίσιο. Εάν βρεθεί η λέξη, η συνάρτηση θα επιστρέψει true, αν όχι, false.$pattern2 = "/box(?!ing)/" ; preg_match($pattern2, "Box για iPhone και iPad"); // true preg_match ($pattern2, "What is boxing day?") ; // false preg_match ($pattern2, "css-moz-box-shadow" ); // αληθές // βρείτε μια λέξη όπου το ing δεν προηγείται από πλαίσιο. Εάν βρεθεί η λέξη, η συνάρτηση θα επιστρέψει true, αν όχι, false.$pattern3 = "/(?

[^<]+?~","seo blog",$text); echo $text; ?>

3) Λάβετε και εμφανίστε την τιμή Alexa Rank ενός συγκεκριμένου ιστότοπου.

1 2 3 4 5 6 7 8 9 "#
(.*?)
#σι", file_get_contents ( "http://www.alexa.com/siteinfo/($url)") , $a ) ; επιστροφή περικοπή (str_replace ("," , "" , strip_tags ($a [ 1 ] ) ) ; ) $alexa = alexa($url) ; echo $alexa ; ?>

(.*?)

#si", file_get_contents("http://www.alexa.com/siteinfo/($url)"), $a); return trim(str_replace(",","",strip_tags($a))); ) $alexa = alexa($url); echo $alexa; ?>

4) Λήψη και εμφάνιση του τίτλου της σελίδας.

1 2 3 4 5 (.*)<\/title>/s" , $str , $m ) ; echo $m [ 1 ] ; ?>

(.*)<\/title>/s", $str, $m); echo $m; ?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 \n \r \t ]/", "" , $content ) ; // αντικαταστήστε τους χαρακτήρες νέας γραμμής και καρτελών με κενά$content = preg_replace ("/(2,)/" , " " , $content ) ; // αντικαταστήστε περισσότερα από 2 κενά με ένα preg_match_all("/ ]*href=(?:"| \" )(.*)(?:"|\" )[^<>]*>(.*)<\/a>/iU", $content , $links ) ; // συλλογή συνδέσμων εάν (sizeof ($links [ 1 ] ) > 0 ) // εάν βρεθούν σύνδεσμοι( $out = πίνακας () ; // πίνακας εξωτερικών συνδέσμων foreach ($links [ 1 ] ως $v ) ( if (preg_match ("/http:\/\/(www\.)(0,1)" . $domain . "/i" , $v ) ) // εξάλειψη των εσωτερικών συνδέσμων(συνέχεια ;) if (preg_match ( "/(http:|https:)?\/\/(www\.)(0,1)(.*)/i", $v )) // εξωτερική αναφορά( $out = $v ; ) ) επιστροφή $out ; ) πίνακας επιστροφής () ; ) $domain = "site" ; $content = file_get_contents ("http://site/" ) ; $getoutlinks = getoutlinks($content, $domain) ; για ($i = 0; $i<= count ($getoutlinks ) ; $i ++ ) { echo $getoutlinks [ $i ] . "
" ; } ?>

]*href=(?:"|\")(.*)(?:"|\")[^<>]*>(.*)<\/a>/iU", $content, $links); // συλλέξτε συνδέσμους εάν (sizeof($links) > 0) // εάν βρεθούν σύνδεσμοι ( $out = array(); // πίνακας εξωτερικών συνδέσμων foreach ($links ως $v ) ( if (preg_match("/http:\/\/(www\.)(0,1)".$domain."/i", $v)) // εξαλείψει τους εσωτερικούς συνδέσμους ( συνέχεια; ) if (preg_match ("/(http:|https:)?\/\/(www\.)(0,1)(..com/"); $getoutlinks = getoutlinks($content, $domain); για ( $i = 0;$i<= count($getoutlinks); $i++) { echo $getoutlinks[$i]."
"; } ?>

Οπου:
preg_replace— Πραγματοποιεί αναζήτηση και αντικατάσταση χρησιμοποιώντας μια τυπική έκφραση.
preg_match— εκτελεί έλεγχο έναντι μιας κανονικής έκφρασης.
preg_match_all— βρίσκει όλες τις αντιστοιχίσεις, ενώ το preg_match βρίσκει μόνο το πρώτο.
file_get_contents— λάβετε τα περιεχόμενα του αρχείου ως μία γραμμή.
τακτοποίηση— αφαιρεί κενά στην αρχή και στο τέλος μιας γραμμής.
str_replace— αντικαθιστά τη συμβολοσειρά αναζήτησης με μια συμβολοσειρά αντικατάστασης.
strip_tags— αφαιρεί τις ετικέτες html και php από μια συμβολοσειρά.
μέγεθος του— παίρνει τον αριθμό των στοιχείων στη μεταβλητή.
μετρώ— μετράει τον αριθμό των στοιχείων πίνακα ή τον αριθμό των ιδιοτήτων του αντικειμένου.