- English
- Español
- Français
- Português do Brasil
- 中文版
- 日本語
- 한국어
- Turkish
- Greek
- Magyar
- Polish
- Русский
- Tiếng Việt
Μια κανονική έκφραση είναι μια ομάδα χαρακτήρων ή συμβόλων που χρησιμοποιούνται για την εύρεση ενός συγκεκριμένου μοτίβου χαρακτήρων μέσα σ'ένα κείμενο.
Μια κανονική έκφραση, είναι μια σειρά χαρακτήρων τους οποίους αναζητούμε μέσα σε ένα κείμενο. Η αναζήτηση αυτή ξεκινά από τα αριστερά και συνεχίζει προς τα δεξιά. Ο όρος "Κανονική Έκφραση" είναι κάπως μεγάλος οπότε πολύ συχνά θα τον συναντήσετε στην συντομότερη μορφή του ως "regex" ή "regexp". Οι εκφράσεις αυτές χρησιμοποιούνται για αντικατάσταση λέξεων μέσα σε κείμενο, για επικυρώσεις τύπων, για αποκοπή ενός κομματιού string με βάση κάποιου μοτίβου αναζήτησης και για πολλά άλλα.
Φανταστείτε ότι πρέπει να γράψουμε μια εφαρμογή και ότι θέλουμε να ορίσουμε κανόνες για την δημιουργία ονόματος χρήστη (username). Σ'αυτή την περίπτωση, θέλουμε να επιτρέψουμε την χρήση γραμμάτων και αριθμών καθώς και την παύλα και κάτω παύλα. Θέλουμε επίσης να περιορίσουμε τον αριθμό χαρακτήρων του ονόματος χρήστη ώστε να μην φαίνεται μεγάλο και άσχημο. Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε την παρακάτω κανονική έκφραση:
Η παραπάνω κανονική έκφραση θα δεχτεί ως σωστά τα ονόματα χρήστη john_doe
, jo-hn_doe
και
john12_as
. Όμως δεν θα δεχτεί το Jo
αφού περιέχει ένα κεφαλαίο γράμμα και είναι πολύ
μικρό.
Μια κανονική έκφραση είναι απλώς ένα μοτίβο, δηλαδή μια σειρά χαρακτήρων, που χρησιμοποιούμε ώστε να κάνουμε
αναζήτηση σε ένα κείμενο (πχ για να βρούμε ένα γράμμα ή μια λέξη κλπ). Για παράδειγμα, η κανονική έκφραση the
αναπαριστά: το γράμμα t
, ακολουθούμενο από το γράμμα h
, ακολουθούμενο από το γράμμα e
.
"the" => The fat cat sat on the mat.
Η κανονική έκφραση 123
"ταιριάζει" με το string 123
. Η έκφραση αυτή
αναζητείται μέσα σ'ένα string εισόδου αντιστοιχίζοντας κάθε χαρακτήρα της με κάθε
χαρακτήρα του string. Οι κανονικές εκφράσεις συνήθως λαμβάνουν υπόψη το αν τα γράμματα είναι
κεφαλαία ή πεζά και άρα η έκφραση The
δεν θα ταίριαζε με το string the
.
"The" => The fat cat sat on the mat.
Οι μεταχαρακτήρες είναι τα δομικά στοιχεία των κανονικών εκφράσεων. Δεν αντιπροσωπεύουν τον εαυτό τους αλλά ερμηνεύονται με ειδικό τρόπο. Μερικοί από αυτούς, έχουν ειδικό νόημα και γι'αυτό γράφονται μέσα σε αγκύλες. Οι μεταχαρακτήρες είναι οι παρακάτω:
Μεταχαρακτήρας | Περιγραφή |
---|---|
. | Η τελεία είναι ισοδύναμη με οποιονδήποτε μεμονωμένο χαρακτήρα εκτός από αυτόν για αλλαγή γραμμής. |
[ ] | Κλάση χαρακτήρων. Είναι ισοδύναμη με οποιονδήποτε χαρακτήρα βρίσκεται μέσα σε αγκύλες. |
[^ ] | Κλάση χαρακτήρων εξαίρεσης. Είναι ισοδύναμη με οποιονδήποτε χαρακτήρα δεν βρίσκεται μέσα σε αγκύλες |
* | Ταιριάζει με 0 ή παραπάνω επαναλήψεις του προηγούμενου συμβόλου. |
+ | Ταιριάζει με 1 ή παραπάνω επαναλήψεις του προηγούμενου συμβόλου. |
? | Κάνει το προηγούμενο σύμβολο προαιρετικό. |
{n,m} | Αγκύλες. Ταιριάζει με τουλάχιστον "n" αλλά όχι με παραπάνω από "m" επαναλήψεις του προηγούμενου συμβόλου. |
(xyz) | Ομάδα χαρακτήρων. Είναι ισοδύναμη με τους χαρακτήρες xyz ακριβώς με την σειρά στην οποία βρίσκονται. |
| | Εναλλαγή. Ταιριάζει είτε με τους χαρακτήρες που βρίσκονται πριν είτε μετά το σύμβολο. |
\ | Παραλείπει το ειδικό νόημα του χαρακτήρα. Αυτό μας επιτρέπει να ταιριάξουμε χαρακτήρες |
ειδικής χρήσης [ ] ( ) { } . * + ? ^ $ \ | |
|
^ | Αναζητά το μοτίβο που ακολουθεί στην αρχή μιας εισόδου. |
$ | Αναζητά το μοτίβο που ακολουθεί στο τέλος μιας εισόδου. |
Η τελεία .
είναι το πιο απλό παράδειγμα μεταχαρακτήρα. Είναι ισοδύναμη με οποιονδήποτε
μεμονωμένο χαρακτήρα με εξαίρεση τον χαρακτήρα για επιστροφή στην αρχή της γραμμής
και αυτόν για νέα σειρά. Για παράδειγμα, η κανονική έκφραση .ar
αναπαριστά: οποιονδήποτε
χαρακτήρα που ακολουθείται από το γράμμα a
, που με την σειρά του ακολουθείται από το γράμμα r
.
".ar" => The car parked in the garage.
Τα σύνολα χαρακτήρων καλούνται αλλιώς και κλάσεις χαρακτήρων. Τα σύνολα αυτά γράφονται μέσα
σε αγκύλες. Για τον ορισμό της εμβέλειας ενός τέτοιου συνόλου χρησιμοποιείται μια παύλα
για να διαχωρίζει την αρχή από το τέλος. Η σειρά των χαρακτήρων, που βρίσκονται μέσα στην
εμβέλεια του συνόλου που ορίζεται από τις αγκύλες, δεν έχει σημασία. Για παράδειγμα,
η κανονική έκφραση [Tt]he
αναπαριστά: ένα κεφαλαίο T
ή ένα πεζό t
, που ακολουθείται
από το γράμμα h
, που με τη σειρά του ακολουθείται από το γράμμα e
.
"[Tt]he" => The car parked in the garage.
Όμως, μια τελεία μέσα σε ένα σύνολο χαρακτήρων, είναι μια κλασική τελεία και δεν εκλαμβάνεται
ως μεταχαρακτήρας. Η κανονική έκφραση ar[.]
αναπαριστά: ένα πεζό γράμμα a
, που
ακολουθείται από το γράμμα r
, που με την σειρά του ακολουθείται από τον χαρακτήρα .
.
"ar[.]" => A garage is a good place to park a car.
Γενικά, το σύμβολο ^ αναπαριστά την αρχή ενός string, αλλά όταν βρίσκεται
μέσα σε αγκύλες ([] όχι {}), αναπαριστά ένα σύνολο χαρακτήρων που θα εξαιρεθούν από την διαδικασία
της αναζήτησης. Για παράδειγμα, η κανονική έκφραση [^c]ar
αναπαριστά: οποιονδήποτε χαρακτήρα
εκτός από το c
, που ακολουθείται από τον χαρακτήρα a
, που ακολουθείται από
το r
.
"[^c]ar" => The car parked in the garage.
Οι μεταχαρακτήρες +
, *
και ?
, χρησιμοποιούνται για να προσδιοριστεί
το πόσες φορές επαναλαμβάνεται ένα υπό-μοτίβο χαρακτήρων μέσα στο string εισόδου. Αυτοί οι
μεταχαρακτήρες συμπεριφέρονται διαφορετικά ανάλογα με την περίσταση.
Το σύμβολο *
ψάχνει για μηδέν ή παραπάνω επαναλήψεις της έκφρασης
που βρίσκεται πριν από αυτό. Η κανονική έκφραση a*
αναπαριστά: αναζήτηση για μηδέν ή παραπάνω
επαναλήψεις του πεζού χαρακτήρα a
. Όταν το σύμβολο * βρίσκεται μετά από ένα σύνολο
ή κλάση χαρακτήρων, τότε εντοπίζει ολόκληρο το σύνολο όσες φορές και αν υπάρχει σε μια
γραμμή. Για παράδειγμα, η κανονική έκφραση [a-z]*
αναπαριστά: οποιονδήποτε συνδυασμό
πεζών γραμμάτων που βρίσκονται στην σειρά.
"[a-z]*" => The car parked in the garage #21.
Το σύμβολο *
μπορεί να χρησιμοποιηθεί σε συνδυασμό με τον χαρακτήρα .
ώστε
να αναζητηθεί μια ακολουθία χαρακτήρων. Μπορεί επίσης να χρησιμοποιηθεί με τον
χαρακτήρα κενού \s
ώστε να αναζητηθεί μια ακολουθία κενών. Για παράδειγμα, η
έκφραση \s*cat\s*
αναπαριστά: μηδέν ή περισσότερα κενά, που ακολουθούνται από
τον πεζό χαρακτήρα c
, που ακολουθείται από τον πεζό χαρακτήρα a
, που ακολουθείται
από τον πεζό χαρακτήρα t
, που ακολουθείται από μηδέν ή περισσότερα κενά.
"\s*cat\s*" => The fat cat sat on the concatenation.
Με σύμβολο +
γίνεται αναζήτηση για μία ή περισσότερες επαναλήψεις του προηγούμενου του χαρακτήρα.
Για παράδειγμα, η κανονική έκφραση c.+t
αναπαριστά: το πεζό γράμμα c
, που ακολουθείται
από τουλάχιστον ένα χαρακτήρα, που ακολουθείται από το πεζό γράμμα t
. Πρέπει να διευκρινίσουμε
ότι το t
είναι το τελευταίο t
της πρότασης.
"c.+t" => The fat cat sat on the mat.
Σε μια κανονική έκφραση, ο μεταχαρακτήρας ?
κάνει τον χαρακτήρα που βρίσκεται πριν από αυτόν,
προαιρετικό ως προς την εύρεσή του. Έτσι γίνεται αναζήτηση για μηδέν ή παραπάνω περιπτώσεις εμφάνισης
του προηγούμενου από το ερωτηματικό χαρακτήρα. Για παράδειγμα, η κανονική έκφραση [T]?he
αναπαριστά:
το προαιρετικό κεφαλαίο T
, που ακολουθείται από πεζό h
, που ακολουθείται από
πεζό e
.
"[T]he" => The car is parked in the garage.
"[T]?he" => The car is parked in the garage.
Οι αγκύλες στις κανονικές εκφράσεις ονομάζονται αλλιώς και "ποσοτικοποιητές" αφού
χρησιμοποιούνται για την εύρεση όλων επαναλήψεων ενός χαρακτήρα ή μιας
ομάδας χαρακτήρων μέσα σ'ένα κείμενο. Για παράδειγμα, η κανονική έκφραση [0-9]{2,3}
αναπαριστά: την
αναζήτηση τουλάχιστον 2 ψηφίων το ένα μετά το άλλο αλλά όχι παραπάνω από 3 (στους χαρακτήρες από το 0 ως το 9).
"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
Μπορούμε να παραλείψουμε τον δεύτερο αριθμό. Για παράδειγμα, η κανονική έκφραση
[0-9]{2,}
αναπαριστά: την αναζήτηση 2 ή περισσότερων ψηφίων το ένα μετά το άλλο. Αν αφαιρέσουμε και
την κόμμα, τότε η κανονική έκφραση [0-9]{3}
αναπαριστά: την σύγκριση ακριβώς 3 ψηφίων.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
Μια ομάδα χαρακτήρων είναι μια ομάδα υπό-μοτίβων που γράφονται μέσα σε παρενθέσεις (...)
.
Όπως είπαμε και προηγουμένως, σε μια κανονική έκφραση, αν τοποθετήσουμε έναν ποσοτικοποιητή μετά από έναν
χαρακτήρα, τότε αυτός ο χαρακτήρας θα βρεθεί όσες φορές και αν υπάρχει μέσα στο κείμενο στο οποίο
εκτελείται η αναζήτηση. Παρομοίως, αν τον βάλουμε μετά από μια ομάδα χαρακτήρων. Για παράδειγμα,
η κανονική έκφραση (ab)*
ταιριάζει με μηδέν ή παραπάνω επαναλήψεις του χαρακτήρα
"ab". Ακόμη, μπορούμε να χρησιμοποιήσουμε τον μεταχαρακτήρα εναλλαγής |
μέσα σε μια ομάδα χαρακτήρων.
Για παράδειγμα, η κανονική έκφραση (c|g|p)ar
αναπαριστά: τους πεζούς χαρακτήρες c
,
g
ή p
, που ακολουθούνται από τον χαρακτήρα a
, που ακολουθείται από τον χαρακτήρα r
.
"(c|g|p)ar" => The car is parked in the garage.
Στις κανονικές εκφράσεις, η κάθετη γραμμή |
, ορίζει μια εναλλαγή.
Έτσι δηλαδή γίνεται μια επιλογή μεταξύ πολλαπλών εκφράσεων. Ίσως σκέφτεστε ότι
η εναλλαγή και τα σύνολα , λειτουργούν με τον ίδιο τρόπο. Αλλά η μεγάλη διαφορά τους
είναι ότι τα σύνολα χαρακτήρων δουλεύουν με χαρακτήρες ενώ η εναλλαγή με εκφράσεις.
Για παράδειγμα, η κανονική έκφραση (T|t)he|car
αναπαριστά: τον κεφαλαίο χαρακτήρα T
ή τον πεζό χαρακτήρα t
, που ακολουθείται από πεζό χαρακτήρα h
, που ακολουθείται από
πεζό χαρακτήρα e
ή πεζό χαρακτήρα c
, που ακολουθείται από πεζό χαρακτήρα a
, που
ακολουθείται από πεζό χαρακτήρα r
.
"(T|t)he|car" => The car is parked in the garage.
Το σύμβολο \
χρησιμοποιείται στις κανονικές εκφράσεις ώστε να αγνοηθεί η ειδική σημασία
που μπορεί να έχει ο χαρακτήρας που βρίσκεται μετά από αυτό. Αυτό μας επιτρέπει να αναζητήσουμε ένα
σύμβολο, συμπεριλαμβανομένων των ειδικών χαρακτήρων { } [ ] / \ + * . $ ^ | ?
. Άρα για αναζήτηση
ειδικών χαρακτήρων, τοποθετούμε ακριβώς πριν το σύμβολο \
.
Για παράδειγμα, η κανονική έκφραση .
χρησιμοποιείται για αναζήτηση οποιουδήποτε χαρακτήρα εκτός από
αυτόν για την νέα γραμμή. Η παρακάτω κανονική έκφραση ψάχνει για το σύμβολο της τελείας .
σε ένα string εισόδου. Η
(f|c|m)at\.?
αναπαριστά: ένα πεζό γράμμα f
, c
ή m
, που ακολουθείται από τον πεζό τον
χαρακτήρα a
, που ακολουθείται από το πεζό γράμμα t
, που ακολουθείται από τον προαιρετικό χαρακτήρα .
.
"(f|c|m)at\.?" => The fat cat sat on the mat.
Σε μια κανονική έκφραση, χρησιμοποιούμε "άγκυρες" για να ελέγξουμε αν το σύμβολο που αναζητάμε είναι
το πρώτο ή το τελευταίο σύμβολο ενός string. Οι άγκυρες είναι δύο τύπων:
Πρώτα είναι το σύμβολο ^
που ελέγχει αν ο χαρακτήρας που ψάχνουμε είναι ο πρώτος
χαρακτήρας της εισόδου και μετά είναι το σύμβολο του δολαρίου $
που ελέγχει αν ο χαρακτήρας που
ψάχνουμε είναι ο τελευταίος στο string εισόδου.
Το σύμβολο ^
χρησιμοποιείται για να ελέγξουμε αν ο χαρακτήρας που ψάχνουμε είναι ο πρώτος χαρακτήρας
του string εισόδου. Αν δοκιμάσουμε την κανονική έκφραση ^a
(ψάχνουμε δηλαδή αν το a είναι το πρώτο
σύμβολο) στο string εισόδου abc
, τότε βλέπουμε ότι όντως το a
είναι ο πρώτος χαρακτήρας. Αλλά
αν δοκιμάσουμε την κανονική έκφραση ^b
στην παραπάνω είσοδο, τότε δεν θα πάρουμε κάποιο αποτέλεσμα.
Αυτό συμβαίνει επειδή στην έκφραση abc
το "b" δεν είναι ο πρώτος χαρακτήρας. Ας ρίξουμε μια ματιά
στην κανονική έκφραση ^(T|t)he
η οποία ψάχνει για: έναν κεφαλαίο χαρακτήρα T
ή έναν
πεζό χαρακτήρα t
που να είναι ο πρώτος χαρακτήρας της εισόδου και να ακολουθείται από
έναν πεζό χαρακτήρα h
, που ακολουθείται από έναν πεζό χαρακτήρα e
.
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
Το σύμβολο του δολαρίου $
χρησιμοποιείται για να ελέγξουμε αν ο χαρακτήρας που αναζητάμε είναι ο τελευταίος
χαρακτήρας του string εισόδου. Για παράδειγμα, η κανονική έκφραση (at\.)$
αναπαριστά: έναν
πεζό χαρακτήρα a
, που ακολουθείται από έναν πεζό χαρακτήρα t
, που ακολουθείται από μια τελεία .
και όλα αυτά πρέπει να είναι οι τελευταίοι χαρακτήρες της εισόδου.
"(at\.)" => The fat cat. sat. on the mat.
"(at\.)$" => The fat cat. sat. on the mat.
Οι κανονικές εκφράσεις χρησιμοποιούν κάποιες συντομογραφίες για τα σύνολα χαρακτήρων που χρησιμοποιούνται πιο συχνά και έτσι γίνονται πιο εύκολες και βολικές για τον χρήστη. Οι συντομογραφίες των συνόλων χαρακτήρων είναι οι παρακάτω:
Συντομογραφία | Περιγραφή |
---|---|
. | Αναζήτηση όλων των χαρακτήρων εκτός από αυτόν για νέα γραμμή |
\w | Αναζήτηση αλφαριθμητικών χαρακτήρων: [a-zA-Z0-9_] |
\W | Αναζήτηση μη αλφαριθμητικών χαρακτήρων: [^\w] |
\d | Αναζήτηση στα ψηφία: [0-9] |
\D | Αναζήτηση χαρακτήρων που δεν είναι αριθμοί: [^\d] |
\s | Αναζήτηση του χαρακτήρα του κενού: [\t\n\f\r\p{Z}] |
\S | Αναζήτηση χαρακτήρων που δεν είναι το κενό: [^\s] |
Η προς τα μπροστά και προς τα πίσω αναζήτηση, είναι συγκεκριμένοι τύποι συνόλων που
ονομάζονται non-capturing groups (Χρησιμοποιούνται για αναζήτηση κάποιου μοτίβου
αλλά δεν συμπεριλαμβάνονται στην λίστα των χαρακτήρων που ψάχνουμε). Οι αναζητήσεις προς τα μπροστά, χρησιμοποιούνται
όταν το μοτίβο έχει πριν ή μετά ένα ακόμη μοτίβο. Για παράδειγμα, αν θέλουμε να βρούμε όλους
τους αριθμούς που βρίσκονται μετά τον χαρακτήρα $
στο παρακάτω string
$4.44 and $10.88
, τότε θα χρησιμοποιήσουμε την κανονική έκφραση (?<=\$)[0-9\.]*
η οποία: βρίσκει όλους τους αριθμούς που βρίσκονται μετά από το σύμβολο$
και περιέχουν τον χαρακτήρα .
.
Παρακάτω μπορείτε να δείτε τους τύπους αναζήτησης στις κανονικές εκφράσεις:
Σύμβολο | Περιγραφή |
---|---|
?= | Θετική Αναζήτηση προς τα Μπροστά |
?! | Αρνητική Αναζήτηση προς τα Μπροστά |
?<= | Θετική Αναζήτηση προς τα Πίσω |
?<! | Αρνητική Αναζήτηση προς τα Πίσω |
Η θετική αναζήτηση προς τα μπροστά, εγγυάται ότι το πρώτο μέρος της έκφρασης θα
ακολουθείται από την ανάλογη έκφραση για προς τα μπροστά αναζήτηση. Το αποτέλεσμα
περιλαμβάνει μόνο το κείμενο που ταιριάζει στο πρώτο κομμάτι της έκφρασης. Για να ορίσουμε
μια τέτοια αναζήτηση, χρησιμοποιούμε παρενθέσεις. Μέσα σε αυτές, τοποθετούμε ένα ερωτηματικό
και ένα ίσον όπως παρακάτω: (?=...)
. Η έκφραση για προς τα μπροστά αναζήτηση, γράφεται μετά
το σύμβολο του ίσον μέσα στις παρενθέσεις. Για παράδειγμα, η κανονική έκφραση
(T|t)he(?=\sfat)
αναπαριστά: είτε το πεζό γράμμα t
είτε το κεφαλαίο γράμμα
T
, που ακολουθείται από το γράμμα h
, που με την σειρά του ακολουθείται από το γράμμα e
. Μέσα στις
παρενθέσεις, ορίζουμε την θετική προς τα μπροστά αναζήτηση, η οποία λέει στον μηχανισμό αναζήτησης
της κανονικής έκφρασης να βρει τα The
ή τα the
που ακολουθούνται από την λέξη fat
.
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
Η αρνητική αναζήτηση προς τα μπροστά, χρησιμοποιείται όταν θέλουμε όλες τις εκφράσεις που
ταιριάζουν με το μοτίβο που αναζητάμε, που όμως δεν ακολουθούνται από κάποιο άλλο μοτίβο.
Αυτή η αναζήτηση ορίζεται όπως και η παραπάνω αλλά αντί για το σύμβολο =
χρησιμοποιούμε το !
,
με αυτό τον τρόπο: (?!...)
. Ας δούμε την κανονική έκφραση (T|t)he(?!\sfat)
η οποία: επιστρέφει
όλα τα The
ή the
που υπάρχουν στο string εισόδου και δεν ακολουθούνται από την λέξη fat
μετά από κενό.
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
Η θετική αναζήτηση προς τα πίσω, χρησιμοποιείται όταν θέλουμε να βρούμε όλες τις εκφράσεις που
ταιριάζουν με ένα μοτίβο (που ορίζουμε εμείς) που βρίσκεται πριν από αυτές. Αυτή η αναζήτηση χρησιμοποιεί τα
σύμβολα (?<=...)
. Για παράδειγμα, η κανονική έκφραση (?<=(T|t)he\s)(fat|mat)
:
επιστρέφει όλες τις λέξεις fat
ή mat
που βρίσκονται μετά την λέξη The
ή the
.
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
Η αρνητική αναζήτηση προς τα πίσω χρησιμοποιείται όταν θέλουμε να βρούμε όλες τις εκφράσεις που
ταιριάζουν με το μοτίβο αναζήτησης, χωρίς όμως να υπάρχει άλλο μοτίβο (που ορίζουμε εμείς) πριν από αυτές.
Αυτή η αναζήτηση χρησιμοποιεί τα σύμβολα (?<!...)
. Για παράδειγμα, η κανονική έκφραση
(?<!(T|t)he\s)(cat)
: επιστρέφει όλες τις λέξεις cat
που δεν βρίσκονται μετά από την λέξη The
ή the
.
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
Οι σημαίες καλούνται αλλιώς και τροποποιητές αφού επηρεάζουν τον τρόπο αναζήτησης των κανονικών εκφράσεων. Μπορούν να χρησιμοποιηθούν με οποιαδήποτε σειρά και σε οποιονδήποτε συνδυασμό συμβόλων και είναι αναπόσπαστο κομμάτι των RegExp.
Σημαία | Περιγραφή |
---|---|
i | Αλλάζει την αναζήτηση ώστε να μην ενδιαφέρεται για τον αν τα γράμματα είναι πεζά ή κεφαλαία. |
g | Καθολική αναζήτηση: Ψάχνει ένα μοτίβο σε ολόκληρο το string εισόδου. |
m | Πολλαπλές γραμμές: Οι μεταχαρακτήρες άγκυρας λειτουργούν σε όλες τις γραμμές. |
Ο τροποποιητής i
χρησιμοποιείται για αναζήτηση που δεν κάνει διακρίσεις μεταξύ πεζών
και κεφαλαίων γραμμάτων. Για παράδειγμα, η κανονική έκφραση /The/gi
αναπαριστά: ένα
κεφαλαίο γράμμα T
, που ακολουθείται από έναν πεζό χαρακτήρα h
, που ακολουθείται από τον χαρακτήρα e
.
Στο τέλος της κανονικής έκφρασης υπάρχει η σημαία i
η οποία λέει στην κανονική
έκφραση να αγνοήσει το αν ένας χαρακτήρας είναι πεζός ή κεφαλαίος. Όπως βλέπετε υπάρχει και η
σημαία g
ώστε η αναζήτηση του μοτίβου να γίνει σε όλο το string εισόδου.
"The" => The fat cat sat on the mat.
"/The/gi" => The fat cat sat on the mat.
Ο τροποποιητής g
χρησιμοποιείται για καθολική αναζήτηση (για να βρεθούν δηλαδή όλες οι
περιπτώσεις που ταιριάζουν με το μοτίβο αναζήτησης και να μην σταματήσει στην πρώτη εύρεση). Για παράδειγμα, η
κανονική έκφραση /.(at)/g
αναπαριστά: οποιονδήποτε χαρακτήρα εκτός από αυτόν για
νέα γραμμή, που ακολουθείται από τον πεζό χαρακτήρα a
, που ακολουθείται από τον πεζό
χαρακτήρα t
και αφού στο τέλος της κανονικής έκφρασης υπάρχει η σημαία g
,
θα βρεθούν όλες οι περιπτώσεις που περιγράφονται από την παραπάνω κανονική έκφραση και όχι μόνο
η πρώτη (που είναι η προκαθορισμένη συμπεριφορά όταν δεν υπάρχει η σημαία g
).
"/.(at)/" => The fat cat sat on the mat.
"/.(at)/g" => The fat cat sat on the mat.
Ο τροποποιητής m
χρησιμοποιείται για αναζήτηση σε πολλές γραμμές. Όπως είπαμε
προηγουμένως, οι άγκυρες (^, $)
χρησιμοποιούνται για να ελέγξουμε αν ένα μοτίβο
βρίσκεται στην αρχή ή στο τέλος του string εισόδου. Αν θέλουμε οι άγκυρες αυτές να
ισχύουν για κάθε γραμμή, τότε χρησιμοποιούμε την σημαία m
. Για παράδειγμα, η
κανονική έκφραση /at(.)?$/gm
αναπαριστά: τον πεζό χαρακτήρα a
, που ακολουθείται
από τον πεζό χαρακτήρα t
και προαιρετικά οτιδήποτε άλλο εκτός από τον χαρακτήρα για
νέα γραμμή. Και αφού υπάρχει και η σημαία m
, η κανονική έκφραση θα αναζητήσει
το μοτίβο στο τέλος κάθε γραμμής του string.
"/.at(.)?$/" => The fat cat sat on the mat.
"/.at(.)?$/gm" => The fat cat sat on the mat.
- Report issues
- Open pull request with improvements
- Spread the word
- Reach out to me directly at [email protected] or
MIT © Zeeshan Ahmad