mirror of
https://github.com/ziishaned/learn-regex.git
synced 2025-09-24 12:30:27 -04:00
First commit
This commit is contained in:
parent
591de7b192
commit
67afd0d5a3
552
README-gr.md
Normal file
552
README-gr.md
Normal file
@ -0,0 +1,552 @@
|
||||
<br/>
|
||||
<p align="center">
|
||||
<img src="https://i.imgur.com/bYwl7Vf.png" alt="Learn Regex">
|
||||
</p><br/>
|
||||
|
||||
## Μεταφράσεις:
|
||||
|
||||
* [English](README.md)
|
||||
* [Español](README-es.md)
|
||||
* [Français](README-fr.md)
|
||||
* [Português do Brasil](README-pt_BR.md)
|
||||
* [中文版](README-cn.md)
|
||||
* [日本語](README-ja.md)
|
||||
* [한국어](README-ko.md)
|
||||
* [Turkish](README-tr.md)
|
||||
* [Greek](README-gr.md)
|
||||
|
||||
## Τι είναι μια Κανονική Έκφραση (Regular Expression);
|
||||
|
||||
> Μια κανονική έκφραση είναι μια ομάδα χαρακτήρων ή συμβόλων που χρησιμοποιούνται για την εύρεση ενός συγκεκριμένου μοτίβου μέσα σ'ένα κείμενο.
|
||||
|
||||
Μια κανονική έκφραση είναι ένα μοτίβο το οποίο συγκρίνεται με ένα string από
|
||||
τα αριστερά προς τα δεξιά. Ο όρος "Κανονική Έκφραση" είναι κάπως μεγάλος οπότε πολύ συχνά
|
||||
θα τον συναντήσετε στην συντομότερη μορφή του ως "regex" ή "regexp". Οι κανονικές εκφράσεις χρησιμοποιούνται
|
||||
για αντικατάσταση κειμένου μέσα σε string, για επικυρώσεις τύπων, για αποκοπή κομματιού ενός
|
||||
string με βάση κάποιου μοτίβου σύγκρισης και για πολλά άλλα.
|
||||
|
||||
Φανταστείτε ότι πρέπει να γράψετε μια εφαρμογή και ότι θέλετε να ορίσετε κανόνες για την περίπτωση που
|
||||
ο χρήστης επιλέγει το username του. Θέλουμε να επιτρέψουμε την χρήση γραμμάτων,
|
||||
αριθμών καθώς και την παύλα και κάτω παύλα. Θέλουμε επίσης να περιορίσουμε τον αριθμό χαρακτήρων
|
||||
του username ώστε να μην φαίνεται άσχημο. Για να το κάνουμε αυτό, χρησιμοποιούμε την παρακάτω κανονική
|
||||
έκφραση:
|
||||
|
||||
<br/><br/>
|
||||
<p align="center">
|
||||
<img src="./img/regexp-en.png" alt="Regular expression">
|
||||
</p>
|
||||
|
||||
Η παραπάνω κανονική έκφραση θα δεχτεί ως σωστά τα strings `john_doe`, `jo-hn_doe` και
|
||||
`john12_as`. Όμως δεν θα δεχτεί το `Jo` αφού περιέχει κεφαλαίο γράμμα και είναι πολύ
|
||||
μικρό.
|
||||
|
||||
## Πίνακας Περιεχομένων
|
||||
|
||||
- [Βασικά Μοτίβα Σύγκρισης](#1-basic-matchers)
|
||||
- [Μεταχαρακτήρες](#2-meta-characters)
|
||||
- [Τελεία](#21-full-stop)
|
||||
- [Σύνολα Χαρακτήρων](#22-character-set)
|
||||
- [Σύνολο Χαρακτήρων προς Εξαίρεση](#221-negated-character-set)
|
||||
- [Επαναλήψεις](#23-repetitions)
|
||||
- [Ο Αστερίσκος](#231-the-star)
|
||||
- [Το Σύμβολο της Πρόσθεσης](#232-the-plus)
|
||||
- [Το Ερωτηματικό](#233-the-question-mark)
|
||||
- [Αγκύλες](#24-braces)
|
||||
- [Ομάδα Χαρακτήρων](#25-character-group)
|
||||
- [Εναλλαγή](#26-alternation)
|
||||
- [Ειδικός Χαρακτήρας Διαφυγής](#27-escaping-special-character)
|
||||
- [Σύμβολα "Άγκυρες"](#28-anchors)
|
||||
- [Το Σύμβολο ^](#281-caret)
|
||||
- [Το Δολάριο](#282-dollar)
|
||||
- [Συντομογραφίες Συνόλων Χαρακτήρων](#3-shorthand-character-sets)
|
||||
- [Αναζήτηση](#4-lookaround)
|
||||
- [Θετική Αναζήτηση προς τα Μπροστά](#41-positive-lookahead)
|
||||
- [Αρνητική Αναζήτηση προς τα Μπροστά](#42-negative-lookahead)
|
||||
- [Θετική Αναζήτηση προς τα Πίσω](#43-positive-lookbehind)
|
||||
- [Αρνητική Αναζήτηση προς τα Πίσω](#44-negative-lookbehind)
|
||||
- [Σημαίες](#5-flags)
|
||||
- [Χωρίς Διάκριση Πεζών-Κεφαλαίων](#51-case-insensitive)
|
||||
- [Καθολική Αναζήτηση](#52-global-search)
|
||||
- [Πολλές Γραμμές](#53-multiline)
|
||||
|
||||
## 1. Βασικά Μοτίβα Σύγκρισης
|
||||
|
||||
Μια κανονική έκφραση είναι απλώς ένα μοτίβο χαρακτήρων που χρησιμοποιούμε ώστε να κάνουμε
|
||||
αναζήτηση σε ένα κείμενο. Για παράδειγμα, η κανονική έκφραση `the` αναπαριστά: το γράμμα
|
||||
`t`, ακολουθούμενο από το γράμμα `h`, ακολουθούμενο από το γράμμα `e`.
|
||||
|
||||
<pre>
|
||||
"the" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/dmRygT/1)
|
||||
|
||||
Η κανονική έκφραση `123` "ταιριάζει" με το string `123`. Η κανονική έκφραση
|
||||
συγκρίνεται με ένα string εισόδου αντιστοιχίζοντας κάθε χαρακτήρα της με κάθε
|
||||
του string εισόδου, το ένα μετά το άλλο. Οι κανονικές εκφράσεις συνήθως λαμβάνουν
|
||||
υπόψη τα κεφαλαία ή πεζά γράμματα και άρα η έκφραση `The` δεν θα ταίριαζε με το
|
||||
string `the`.
|
||||
|
||||
<pre>
|
||||
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/1paXsy/1)
|
||||
|
||||
## 2. Μεταχαρακτήρες
|
||||
|
||||
Οι μεταχαρακτήρες είναι τα δομικά στοιχεία των κανονικών εκφράσεων. Δεν αντιπροσωπεύουν
|
||||
τον εαυτό τους αλλά ερμηνεύονται με ειδικό τρόπο. Μερικοί από αυτούς, έχουν
|
||||
ειδικό νόημα και γράφονται μέσα σε αγκύλες. Οι ματαχαρακτήρες είναι οι παρακάτω:
|
||||
|
||||
|Μεταχαρακτήρας|Περιγραφή|
|
||||
|:----:|----|
|
||||
|.|Η τελεία ταιριάζει με οποιονδήποτε μεμονωμένο χαρακτήρα εκτός από αυτόν για αλλαγή γραμμής.|
|
||||
|[ ]|Κλάση χαρακτήρων. Ταιριάζει με οποιονδήποτε χαρακτήρα βρίσκεται μέσα σε αγκύλες.|
|
||||
|[^ ]|Κλάση χαρακτήρων εξαίρεσης. Ταιριάζει με οποιονδήποτε χαρακτήρα δεν βρίσκεται μέσα σε αγκύλες|
|
||||
|*|Ταιριάζει με 0 ή παραπάνω επαναλήψεις του προηγούμενου συμβόλου.|
|
||||
|+|Ταιριάζει με 1 ή παραπάνω επαναλήψεις του προηγούμενου συμβόλου.|
|
||||
|?|Κάνει το προηγούμενο σύμβολο προαιρετικό.|
|
||||
|{n,m}|Αγκύλες. Ταιριάζει με τουλάχιστον "n" αλλά όχι με παραπάνω από "m" επαναλήψεις του προηγούμενου συμβόλου.|
|
||||
|(xyz)|Ομάδα χαρακτήρων. Ταιριάζει με τους χαρακτήρες xyz ακριβώς με την σειρά στην οποία βρίσκονται.|
|
||||
|||Εναλλαγή. Ταιριάζει είτε με τους χαρακτήρες που βρίσκονται πριν είτε μετά το σύμβολο.|
|
||||
|\|Παραλείπει τον επόμενο χαρακτήρα. Αυτό μας επιτρέπει να ταιριάξουμε χαρακτήρες ειδικής χρήσης <code>[ ] ( ) { } . * + ? ^ $ \ |</code>|
|
||||
|^|Συγκρίνεται με την αρχή μιας εισόδου.|
|
||||
|$|Συγκρίνεται με το τέλος μια εισόδου.|
|
||||
|
||||
## 2.1 Τελεία
|
||||
|
||||
Η τελεία `.` είναι το πιο απλό παράδειγμα μεταχαρακτήρα. Ταιριάζει με οποιονδήποτε
|
||||
μεμονωμένο χαρακτήρα. Δεν ταιριάζει με τον χαρακτήρα για επιστροφή στην αρχή της γραμμής
|
||||
ούτε με αυτόν για νέα σειρά. Για παράδειγμα, η κανονική έκφραση `.ar` αναπαριστά: οποιονδήποτε
|
||||
χαρακτήρα που ακολουθείται από το γράμμα `a`, που ακολουθείται από το γράμμα `r`.
|
||||
|
||||
<pre>
|
||||
".ar" => The <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/xc9GkU/1)
|
||||
|
||||
## 2.2 Σύνολα Χαρακτήρων
|
||||
|
||||
Τα σύνολα χαρακτήρων καλούνται και κλάσεις χαρακτήρων. Για τον ορισμό αυτών
|
||||
των συνόλων χρησιμοποιούνται αγκύλες. Για τον ορισμό της εμβέλειας ενός συνόλου
|
||||
χαρακτήρων χρησιμοποιείται η παύλα. Η σειρά των χαρακτήρων, που βρίσκονται μέσα
|
||||
εμβέλεια του συνόλου που ορίζεται από τις αγκύλες, δεν έχει σημασία. Για παράδειγμα,
|
||||
η κανονική έκφραση `[Tt]he` αναπαριστά: ένα κεφαλαίο `T` ή πεζό `t`, που ακολουθείται
|
||||
από το γράμμα `h`, που ακολουθείται από το γράμμα `e`.
|
||||
|
||||
<pre>
|
||||
"[Tt]he" => <a href="#learn-regex"><strong>The</strong></a> car parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/2ITLQ4/1)
|
||||
|
||||
Όμως, μια τελεία μέσα σε ένα σύνολο χαρακτήρων, είναι μια κλασική τελεία. Η κανονική
|
||||
έκφραση `ar[.]` αναπαριστά: ένα πεζό γράμμα `a`, που ακολουθείται από το γράμμα `r`,
|
||||
που ακολουθείται από τον χαρακτήρα `.`.
|
||||
|
||||
<pre>
|
||||
"ar[.]" => A garage is a good place to park a c<a href="#learn-regex"><strong>ar.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/wL3xtE/1)
|
||||
|
||||
### 2.2.1 Σύνολο Χαρακτήρων προς Εξαίρεση
|
||||
|
||||
Γενικά, το σύμβολο ^ αναπαριστά την αρχή ενός string, αλλά όταν γράφεται
|
||||
μετά από το άνοιγμα αγκύλης, αναπαριστά ένα σύνολο χαρακτήρων προς εξαίρεση.
|
||||
ΓΙα παράδειγμα, η κανονική έκφραση `[^c]ar` αναπαριστά: οποιονδήποτε χαρακτήρα
|
||||
εκτός από το `c`, που ακολουθείται από τον χαρακτήρα `a`, που ακολουθείται από
|
||||
το `r`.
|
||||
|
||||
<pre>
|
||||
"[^c]ar" => The car <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/nNNlq3/1)
|
||||
|
||||
## 2.3 Επαναλήψεις
|
||||
|
||||
Οι μεταχαρακτήρες `+`, `*` και `?`, χρησιμοποιούνται για να προσδιοριστεί
|
||||
το πόσες φορές μπορεί να επαναληφθεί ένα υπό-μοτίβο χαρακτήρων. Αυτοί οι
|
||||
μεταχαρακτήρες συμπεριφέρονται διαφορετικά ανάλογα με την περίπτωση.
|
||||
|
||||
### 2.3.1 Ο Αστερίσκος
|
||||
|
||||
Το σύμβολο `*` ταιριάζει με μηδέν ή παραπάνω επαναλήψεις της προηγούμενης έκφρασης.
|
||||
Η κανονική έκφραση `a*` αναπαριστά: μηδέν ή παραπάνω επαναλήψεις του προηγούμενου
|
||||
πεζού χαρακτήρα `a`. Αν όμως το σύμβολο βρίσκεται μετά από ένα σύνολο ή κλάση χαρακτήρων
|
||||
τότε βρίσκει τις επαναλήψεις ολόκληρου του συνόλου. ΓΙα παράδειγμα, η κανονική έκφραση
|
||||
`[a-z]*` αναπαριστά: οποιονδήποτε συνδυασμό πεζών γραμμάτων που βρίσκονται στην σειρά.
|
||||
|
||||
<pre>
|
||||
"[a-z]*" => T<a href="#learn-regex"><strong>he</strong></a> <a href="#learn-regex"><strong>car</strong></a> <a href="#learn-regex"><strong>parked</strong></a> <a href="#learn-regex"><strong>in</strong></a> <a href="#learn-regex"><strong>the</strong></a> <a href="#learn-regex"><strong>garage</strong></a> #21.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/7m8me5/1)
|
||||
|
||||
Το σύμβολο `*` μπορεί να χρησιμοποιηθεί σε συνδυασμό με τον χαρακτήρα `.` ώστε
|
||||
να συγκρίνει μια ακολουθία χαρακτήρων `.*`. Μπορεί επίσης να χρησιμοποιηθεί με τον
|
||||
χαρακτήρα κενού `\s` ώστε να συγκρίνει μια ακολουθία κενών. Για παράδειγμα, η
|
||||
έκφραση `\s*cat\s*` αναπαριστά: μηδέν ή περισσότερα κενά, που ακολουθούνται από
|
||||
τον πεζό χαρακτήρα `c`, που ακολουθείται από τον πεζό χαρακτήρα `a`, που ακολουθείται
|
||||
από τον πεζό χαρακτήρα `t`, που ακολουθείται από μηδέν ή περισσότερα κενά.
|
||||
|
||||
<pre>
|
||||
"\s*cat\s*" => The fat<a href="#learn-regex"><strong> cat </strong></a>sat on the <a href="#learn-regex">con<strong>cat</strong>enation</a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/gGrwuz/1)
|
||||
|
||||
### 2.3.2 Το Σύμβολο της Πρόσθεσης
|
||||
|
||||
Το σύμβολο `+` συγκρίνει μία ή περισσότερες επαναλήψεις του προηγούμενου χαρακτήρα.
|
||||
Για παράδειγμα, η κανονική έκφραση `c.+t` αναπαριστά: το πεζό γράμμα `c`, που ακολουθείται
|
||||
από τουλάχιστον ένα χαρακτήρα, που ακολουθείται από το πεζό γράμμα `t`. Πρέπει να διευκρινίσουμε
|
||||
ότι το `t` είναι το τελευταίο `t` της πρότασης.
|
||||
|
||||
<pre>
|
||||
"c.+t" => The fat <a href="#learn-regex"><strong>cat sat on the mat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/Dzf9Aa/1)
|
||||
|
||||
### 2.3.3 Το Ερωτηματικό
|
||||
|
||||
Σε μια κανονική έκφραση, ο μεταχαρακτήρας `?` κάνει τον προηγούμενο χαρακτήρα
|
||||
προαιρετικό. Αυτό το σύμβολο συγκρίνει μηδέν ή παραπάνω περιπτώσεις εμφάνισης
|
||||
του προηγούμενου χαρακτήρα. Για παράδειγμα, η κανονική έκφραση `[T]?he` αναπαριστά:
|
||||
το προαιρετικό κεφαλαίο `T`, που ακολουθείται από πεζό `h`, που ακολουθείται από
|
||||
πεζό `e`.
|
||||
|
||||
<pre>
|
||||
"[T]he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/cIg9zm/1)
|
||||
|
||||
<pre>
|
||||
"[T]?he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in t<a href="#learn-regex"><strong>he</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/kPpO2x/1)
|
||||
|
||||
## 2.4 Αγκύλες
|
||||
|
||||
Οι αγκύλες στις κανονικές εκφράσεις ονομάζονται αλλιώς και "ποσοτικοποιητές" αφού
|
||||
χρησιμοποιούνται για τον καθορισμό του αριθμού επαναλήψεων ενός χαρακτήρα ή μιας
|
||||
ομάδας χαρακτήρων. ΓΙα παράδειγμα, η κανονική έκφραση `[0-9]{2,3}` αναπαριστά: την
|
||||
σύγκριση τουλάχιστον 2 ψηφίων αλλά όχι παραπάνω από 3 (στους χαρακτήρες από το 0 ως το 9).
|
||||
|
||||
<pre>
|
||||
"[0-9]{2,3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/juM86s/1)
|
||||
|
||||
Μπορούμε να παραλείψουμε τον δεύτερο αριθμό. Για παράδειγμα, η κανονική έκφραση
|
||||
`[0-9]{2,}` αναπαριστά: την σύγκριση 2 ή περισσότερων ψηφίων. Αν αφαιρέσουμε και
|
||||
την κόμμα, τότε η κανονική έκφραση `[0-9]{3}` αναπαριστά: την σύγκριση ακριβώς 3 ψηφίων.
|
||||
|
||||
<pre>
|
||||
"[0-9]{2,}" => The number was 9.<a href="#learn-regex"><strong>9997</strong></a> but we rounded it off to <a href="#learn-regex"><strong>10</strong></a>.0.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/Gdy4w5/1)
|
||||
|
||||
<pre>
|
||||
"[0-9]{3}" => The number was 9.<a href="#learn-regex"><strong>999</strong></a>7 but we rounded it off to 10.0.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/Sivu30/1)
|
||||
|
||||
## 2.5 Ομάδα Χαρακτήρων
|
||||
|
||||
Μια ομάδα χαρακτήρων είναι μια ομάδα υπό-μοτίβων που γράφονται μέσα σε παρενθέσεις `(...)`.
|
||||
Όπως είπαμε και προηγουμένως, σε μια κανονική έκφραση, αν τοποθετήσουμε ένα ποσοτικοποιητή μετά από έναν
|
||||
χαρακτήρα, τότε θα επαναλάβει τον προηγούμενο χαρακτήρα. Αλλά αν τον βάλουμε μετά
|
||||
από μια ομάδα χαρακτήρων, τότε επαναλαμβάνει ολόκληρη την ομάδα. Για παράδειγμα,
|
||||
η κανονική έκφραση `(ab)*` ταιριάζει με μηδέν ή παραπάνω επαναλήψεις του χαρακτήρα
|
||||
"ab". Ακόμη, μπορούμε να χρησιμοποιήσουμε τον μεταχαρακτήρα εναλλαγής `|` μέσα στην ομάδα χαρακτήρων.
|
||||
Για παράδειγμα, η κανονική έκφραση `(c|g|p)ar` αναπαριστά: τους πεζούς χαρακτήρες `c`,
|
||||
`g` ή `p`, που ακολουθούνται από τον χαρακτήρα `a`, που ακολουθείται από τον χαρακτήρα `r`.
|
||||
|
||||
<pre>
|
||||
"(c|g|p)ar" => The <a href="#learn-regex"><strong>car</strong></a> is <a href="#learn-regex"><strong>par</strong></a>ked in the <a href="#learn-regex"><strong>gar</strong></a>age.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/tUxrBG/1)
|
||||
|
||||
## 2.6 Εναλλαγή
|
||||
|
||||
Στις κανονικές εκφράσεις, η κάθετη γραμμή `|`, ορίζει μια εναλλαγή.
|
||||
Έτσι δηλαδή ορίζεται μια επιλογή μεταξύ πολλαπλών εκφράσεων. Ίσως σκέφτεσαι ότι
|
||||
η εναλλαγή και τα σύνολα , λειτουργούν με τον ίδιο τρόπο. Αλλά η μεγάλη διαφορά τους
|
||||
είναι ότι τα σύνολα χαρακτήρων δουλεύουν με χαρακτήρες ενώ η εναλλαγή με εκφράσεις.
|
||||
Για παράδειγμα, η κανονική έκφραση `(T|t)he|car` αναπαριστά: τον κεφαλαίο χαρακτήρα `T`
|
||||
ή τον πεζό χαρακτήρα `t`, που ακολουθείται από πεζό χαρακτήρα `h`, που ακολουθείται από
|
||||
πεζό χαρακτήρα `e` ή πεζό χαρακτήρα `c`, που ακολουθείται από πεζό χαρακτήρα `a`, που
|
||||
ακολουθείται από πεζό χαρακτήρα `r`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he|car" => <a href="#learn-regex"><strong>The</strong></a> <a href="#learn-regex"><strong>car</strong></a> is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/fBXyX0/1)
|
||||
|
||||
## 2.7 Ειδικός Χαρακτήρας Διαφυγής
|
||||
|
||||
Το σύμβολο `\` χρησιμοποιείται στις κανονικές εκφράσεις ώστε να αγνοηθεί ο επόμενος χαρακτήρας.
|
||||
Αυτό μας επιτρέπει να ορίσουμε ως χαρακτήρα προς σύγκριση ένα σύμβολο, συμπεριλαμβανομένου των ειδικών
|
||||
χαρακτήρων `{ } [ ] / \ + * . $ ^ | ?`. Για να χρησιμοποιήσετε έναν ειδικό χαρακτήρα μ'αυτόν τον τρόπο,
|
||||
τοποθετήστε πριν από αυτόν το σύμβολο `\`.
|
||||
|
||||
Για παράδειγμα, η κανονική έκφραση `.` χρησιμοποιείται για σύγκριση με οποιονδήποτε χαρακτήρα εκτός από
|
||||
αυτόν για την νέα γραμμή. Η παρακάτω κανονική έκφραση ψάχνει για `.` σε ένα string εισόδου. Η
|
||||
`(f|c|m)at\.?` αναπαριστά: ένα πεζό γράμμα `f`, `c` ή `m`, που ακολουθείται από τον πεζό
|
||||
χαρακτήρα `a`, που ακολουθείται από το πεζό γράμμα `t`, που ακολουθείται από τον προαιρετικό χαρακτήρα `.`.
|
||||
|
||||
<pre>
|
||||
"(f|c|m)at\.?" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> sat on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/DOc5Nu/1)
|
||||
|
||||
## 2.8 Σύμβολα "Άγκυρες"
|
||||
|
||||
Σε μια κανονική έκφραση, χρησιμοποιούμε άγκυρες για να ελέγξουμε αν το σύμβολο προς εύρεση είναι
|
||||
το αρχικό ή το τελικό σύμβολο ενός string. Οι άγκυρες είναι δύο τύπων:
|
||||
Πρώτα είναι το σύμβολο `^` που ελέγχει αν ο χαρακτήρας που ψάχνουμε είναι ο αρχικός
|
||||
χαρακτήρας της εισόδου και μετά είναι το σύμβολο του δολαρίου `$` που ελέγχει αν ο χαρακτήρας που
|
||||
ψάχνουμε είναι ο τελευταίος στο string εισόδου.
|
||||
|
||||
### 2.8.1 Το Σύμβολο ^
|
||||
|
||||
Το σύμβολο `^` χρησιμοποιείται για να ελέγξουμε αν ο χαρακτήρας που ψάχνουμε είναι ο πρώτος χαρακτήρας
|
||||
του string εισόδου. Αν δοκιμάσουμε την παρακάτω κανονική έκφραση `^a` (αν το a είναι το αρχικό
|
||||
σύμβολο) στο string εισόδου `abc`, ταιριάζει με το `a`. Αλλά αν δοκιμάσουμε την κανονική έκφραση
|
||||
`^b` στην παραπάνω είσοδο τότε δεν ταιριάζει με τίποτα.
|
||||
Αυτό συμβαίνει επειδή στην έκφραση `abc` το "b" δεν είναι ο αρχικός χαρακτήρας. Ας ρίξουμε μια ματιά
|
||||
στην κανονική έκφραση `^(T|t)he` η οποία ψάχνει για: έναν κεφαλαίο χαρακτήρα `T` ή έναν
|
||||
πεζό χαρακτήρα `t` που να είναι οι πρώτοι χαρακτήρες τις εισόδου και να ακολουθούνται από
|
||||
έναν πεζό χαρακτήρα `h`, που ακολουθείται από έναν πεζό χαρακτήρα `e`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in <a href="#learn-regex"><strong>the</strong></a> garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/5ljjgB/1)
|
||||
|
||||
<pre>
|
||||
"^(T|t)he" => <a href="#learn-regex"><strong>The</strong></a> car is parked in the garage.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/jXrKne/1)
|
||||
|
||||
### 2.8.2 Το Δολάριο
|
||||
|
||||
Το σύμβολο του δολαρίου `$` χρησιμοποιείται για να ελέγξουμε αν ο χαρακτήρας προς σύγκριση είναι ο τελευταίος
|
||||
χαρακτήρας του string εισόδου. ΓΙα παράδειγμα, η κανονική έκφραση `(at\.)$` αναπαριστά: έναν
|
||||
πεζό χαρακτήρα `a`, που ακολουθείται από έναν πεζό χαρακτήρα `t`, που ακολουθείται από μια τελεία `.`
|
||||
και όλα αυτά πρέπει να είναι οι τελευταίοι χαρακτήρες της εισόδου.
|
||||
|
||||
<pre>
|
||||
"(at\.)" => The fat c<a href="#learn-regex"><strong>at.</strong></a> s<a href="#learn-regex"><strong>at.</strong></a> on the m<a href="#learn-regex"><strong>at.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/y4Au4D/1)
|
||||
|
||||
<pre>
|
||||
"(at\.)$" => The fat cat. sat. on the m<a href="#learn-regex"><strong>at.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/t0AkOd/1)
|
||||
|
||||
## 3. Συντομογραφίες Συνόλων Χαρακτήρων
|
||||
|
||||
Οι κανονικές εκφράσεις μας παρέχουν συντομογραφίες για τα σύνολα χαρακτήρων που
|
||||
χρησιμοποιούνται πιο συχνά, κάτι που μας προσφέρει βολικές συντομογραφίες για τις πιο συχνά
|
||||
χρησιμοποιούμενες κανονικές εκφράσεις. Οι συντομογραφίες των συνόλων χαρακτήρων είναι οι
|
||||
παρακάτω:
|
||||
|
||||
|Συντομογραφία|Περιγραφή|
|
||||
|:----:|----|
|
||||
|.|Όλοι οι χαρακτήρες εκτός από αυτόν για νέα γραμμή|
|
||||
|\w|Ταίριασμα με αλφαριθμητικούς χαρακτήρες: `[a-zA-Z0-9_]`|
|
||||
|\W|Ταίριασμα με μη αλφαριθμητικούς χαρακτήρες: `[^\w]`|
|
||||
|\d|Ταίριασμα με τα ψηφία: `[0-9]`|
|
||||
|\D|Ταίριασμα με τα μη ψηφία: `[^\d]`|
|
||||
|\s|Ταίριασμα με τον χαρακτήρα του κενού: `[\t\n\f\r\p{Z}]`|
|
||||
|\S|Ταίριασμα με τους χαρακτήρες που δεν είναι το κενό: `[^\s]`|
|
||||
|
||||
## 4. Αναζήτηση
|
||||
|
||||
Η προς τα μπροστά και προς τα πίσω αναζήτηση, είναι συγκεκριμένοι τύποι συνόλων που
|
||||
ονομάζονται ***non-capturing groups*** (Χρησιμοποιούνται για να συγκριθούν με κάποιο μοτίβο
|
||||
αλλά δεν συμπεριλαμβάνονται στην λίστα προς σύγκριση). Οι αναζητήσεις προς τα μπροστά, χρησιμοποιούνται
|
||||
όταν το μοτίβο έχει πριν ή μετά ένα ακόμη μοτίβο. Για παράδειγμα, αν θέλουμε να βρούμε όλους
|
||||
τους αριθμούς που βρίσκονται μετά τον χαρακτήρα `$` στο παρακάτω string
|
||||
`$4.44 and $10.88`, τότε θα χρησιμοποιήσουμε την κανονική έκφραση `(?<=\$)[0-9\.]*`
|
||||
η οποία: βρίσκει όλους τους αριθμούς που περιέχουν τον χαρακτήρα `.` και ο προηγούμενος χαρακτήρας
|
||||
είναι το `$`. Παρακάτω μπορείτε να δείτε τις αναζητήσεις που χρησιμοποιούνται στις κανονικές εκφράσεις:
|
||||
|
||||
|Σύμβολο|Περιγραφή|
|
||||
|:----:|----|
|
||||
|?=|Θετική Αναζήτηση προς τα Μπροστά|
|
||||
|?!|Αρνητική Αναζήτηση προς τα Μπροστά|
|
||||
|?<=|Positive Lookbehind|
|
||||
|?<!|Negative Lookbehind|
|
||||
|
||||
### 4.1 Θετική Αναζήτηση προς τα Μπροστά
|
||||
|
||||
Η θετική αναζήτηση προς τα μπροστά, εγγυάται ότι το πρώτο μέρος της έκφρασης θα
|
||||
ακολουθείται από την ανάλογη έκφραση για προς τα μπροστά αναζήτηση. Το αποτέλεσμα
|
||||
περιέχει μόνο το κείμενο που ταιριάζει στο πρώτο κομμάτι της έκφρασης. Για να ορίσουμε
|
||||
μια τέτοια αναζήτηση, χρησιμοποιούμε παρενθέσεις. Μέσα σε αυτές, τοποθετούμε ένα ερωτηματικό
|
||||
και ένα ίσον όπως παρακάτω: `(?=...)`. Η έκφραση για προς τα μπροστά αναζήτηση, γράφεται μετά
|
||||
το σύμβολο του ίσον μέσα στις παρενθέσεις. Για παράδειγμα, η κανονική έκφραση
|
||||
`(T|t)he(?=\sfat)` αναπαριστά: είτε το πεζό γράμμα `t` είτε το κεφαλαίο γράμμα
|
||||
`T`, που ακολουθείται από το γράμμα `h`, που ακολουθείται από το γράμμα `e`. Μέσα στις
|
||||
παρενθέσεις, ορίζουμε την θετική προς τα μπροστά αναζήτηση, η οποία λέει στην μηχανή
|
||||
της κανονικής έκφρασης να ταιριάξει τα `The` ή τα `the` που ακολουθούνται από την λέξη `fat`.
|
||||
|
||||
<pre>
|
||||
"(T|t)he(?=\sfat)" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/IDDARt/1)
|
||||
|
||||
### 4.2 Αρνητική Αναζήτηση προς τα Μπροστά
|
||||
|
||||
Η αρνητική αναζήτηση προς τα μπροστά, χρησιμοποιείται όταν θέλουμε όλες τις εκφράσεις που
|
||||
ταιριάζουν με το μοτίβο προς σύγκριση, που δεν ακολουθούνται όμως από άλλο μοτίβο.
|
||||
Ορίζεται όπως και η παραπάνω αναζήτηση αλλά αντί για το σύμβολο `=` χρησιμοποιούμε το `!`,
|
||||
για παράδειγμα `(?!...)`. Ας δούμε την κανονική έκφραση `(T|t)he(?!\sfat)` η οποία: επιστρέφει
|
||||
όλα τα `The` ή `the` που υπάρχουν στο string εισόδου και δεν ακολουθούνται από την λέξη `fat`
|
||||
μετά από κενό.
|
||||
|
||||
<pre>
|
||||
"(T|t)he(?!\sfat)" => The fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/V32Npg/1)
|
||||
|
||||
### 4.3 Θετική Αναζήτηση προς τα Πίσω
|
||||
|
||||
Η θετική αναζήτηση προς τα πίσω, χρησιμοποιείται όταν θέλουμε όλες τις εκφράσεις που
|
||||
ταιριάζουν με το μοτίβο που βρίσκεται πριν από αυτές. Αυτή η αναζήτηση ορίζεται με τα
|
||||
σύμβολα `(?<=...)`. Για παράδειγμα, η κανονική έκφραση `(?<=(T|t)he\s)(fat|mat)`:
|
||||
επιστρέφει όλες τις λέξεις `fat` ή `mat` που βρίσκονται μετά την λέξη `The` ή `the`.
|
||||
|
||||
<pre>
|
||||
"(?<=(T|t)he\s)(fat|mat)" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the <a href="#learn-regex"><strong>mat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/avH165/1)
|
||||
|
||||
### 4.4 Αρνητική Αναζήτηση προς τα Πίσω
|
||||
|
||||
Η αρνητική αναζήτηση προς τα πίσω χρησιμοποιείται όταν θέλουμε όλες τις εκφράσεις που
|
||||
ταιριάζουν χωρίς όμως να υπάρχει κάποιο μοτίβο πριν από αυτές. Αυτή η αναζήτηση ορίζεται με τα
|
||||
σύμβολα `(?<!...)`. Για παράδειγμα, η κανονική έκφραση `(?<!(T|t)he\s)(cat)`: επιστρέφει όλες
|
||||
τις λέξεις `cat` που δεν βρίσκονται μετά από την λέξη `The` ή `the`.
|
||||
|
||||
<pre>
|
||||
"(?<!(T|t)he\s)(cat)" => The cat sat on <a href="#learn-regex"><strong>cat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/8Efx5G/1)
|
||||
|
||||
## 5. Σημαίες
|
||||
|
||||
Οι σημαίες καλούνται αλλιώς και τροποποιητές αφού μετασχηματίζουν την έξοδο μιας
|
||||
κανονικής έκφρασης. Μπορούν να χρησιμοποιηθούν με οποιαδήποτε σειρά ή συνδυασμό
|
||||
και είναι αναπόσπαστο κομμάτι των RegExp.
|
||||
|
||||
|Σημαία|Περιγραφή|
|
||||
|:----:|----|
|
||||
|i|Αλλάζει την αναζήτηση ώστε να μην ενδιαφέρεται για τον αν τα γράμματα είναι πεζά ή κεφαλαία.|
|
||||
|g|Καθολική αναζήτηση: Ψάχνει ένα μοτίβο σε ολόκληρο το string εισόδου.|
|
||||
|m|Πολλαπλές γραμμές: Ο μεταχαρακτήρας άγκυρα λειτουργεί σε όλες τις γραμμές.|
|
||||
|
||||
### 5.1 Χωρίς Διάκριση Πεζών-Κεφαλαίων
|
||||
|
||||
Ο τροποποιητής `i` χρησιμοποιείται για αναζήτηση που δεν κάνει διακρίσεις μεταξύ πεζών
|
||||
και κεφαλαίων γραμμάτων. Για παράδειγμα, η κανονική έκφραση `/The/gi` αναπαριστά: ένα
|
||||
κεφαλαίο γράμμα `T`, που ακολουθείται έναν πεζό χαρακτήρα `h`, που ακολουθείται τον χαρακτήρα `e`.
|
||||
Και στο τέλος της κανονικής έκφρασης υπάρχει η σημαία `i` η οποία λέει στην μηχανή της κανονικής
|
||||
έκφρασης να αγνοήσει το αν ένας χαρακτήρας είναι πεζός ή κεφαλαίος. Όπως βλέπεται υπάρχει και η
|
||||
σημαία `g` ώστε η αναζήτηση του μοτίβου να γίνει σε όλο το string εισόδου.
|
||||
|
||||
<pre>
|
||||
"The" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/dpQyf9/1)
|
||||
|
||||
<pre>
|
||||
"/The/gi" => <a href="#learn-regex"><strong>The</strong></a> fat cat sat on <a href="#learn-regex"><strong>the</strong></a> mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/ahfiuh/1)
|
||||
|
||||
### 5.2 Καθολική Αναζήτηση
|
||||
|
||||
Ο τροποποιητής `g`χρησιμοποιείται για καθολική αναζήτηση (να βρει δηλαδή όλες τις
|
||||
περιπτώσεις που ταιριάζουν και να μην σταματήσει στην πρώτη). Για παράδειγμα, η
|
||||
κανονική έκφραση `/.(at)/g` αναπαριστά: οποιονδήποτε χαρακτήρα εκτός από αυτόν για
|
||||
νέα γραμμή, που ακολουθείται από τον πεζό χαρακτήρα `a`, που ακολουθείται από τον πεζό
|
||||
χαρακτήρα `t`. Αφού στο τέλος της κανονικής έκφρασης υπάρχει και η σημαία `g`,
|
||||
θα βρεθούν όλα τα ταιριάσματα στο string εισόδου και όχι μόνο το πρώτο (που είναι η προκαθορισμένη
|
||||
συμπεριφορά).
|
||||
|
||||
<pre>
|
||||
"/.(at)/" => The <a href="#learn-regex"><strong>fat</strong></a> cat sat on the mat.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/jnk6gM/1)
|
||||
|
||||
<pre>
|
||||
"/.(at)/g" => The <a href="#learn-regex"><strong>fat</strong></a> <a href="#learn-regex"><strong>cat</strong></a> <a href="#learn-regex"><strong>sat</strong></a> on the <a href="#learn-regex"><strong>mat</strong></a>.
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/dO1nef/1)
|
||||
|
||||
### 5.3 Πολλές Γραμμές
|
||||
|
||||
Ο τροποποιητής `m` χρησιμοποιείται για αναζήτηση σε πολλές γραμμές. Όπως είπαμε
|
||||
προηγουμένως, οι άγκυρες `(^, $)` χρησιμοποιούνται για να ελέγξουμε αν ένα μοτίβο
|
||||
βρίσκεται στην αρχή ή στο τέλος του string εισόδου. Αν θέλουμε οι άγκυρες αυτές να
|
||||
ισχύουν για κάθε γραμμή, τότε χρησιμοποιούμε την σημαία `m` flag. Για παράδειγμα, η
|
||||
κανονική έκφραση `/at(.)?$/gm` αναπαριστά: τον πεζό χαρακτήρα `a`, που ακολουθείται
|
||||
από τον πεζό χαρακτήρα `t` και προαιρετικά οτιδήποτε άλλο εκτός από τον χαρακτήρα για
|
||||
νέα γραμμή. Και αφού υπάρχει και η σημαία `m`, η μηχανή της κανονικής έκφρασης θα
|
||||
ταιριάζει το μοτίβο στο τέλος κάθε γραμμής του string.
|
||||
|
||||
<pre>
|
||||
"/.at(.)?$/" => The fat
|
||||
cat sat
|
||||
on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/hoGMkP/1)
|
||||
|
||||
<pre>
|
||||
"/.at(.)?$/gm" => The <a href="#learn-regex"><strong>fat</strong></a>
|
||||
cat <a href="#learn-regex"><strong>sat</strong></a>
|
||||
on the <a href="#learn-regex"><strong>mat.</strong></a>
|
||||
</pre>
|
||||
|
||||
[Δοκιμή της κανονικής έκφρασης](https://regex101.com/r/E88WE2/1)
|
||||
|
||||
## Contribution
|
||||
|
||||
* Report issues
|
||||
* Open pull request with improvements
|
||||
* Spread the word
|
||||
* Reach out to me directly at ziishaned@gmail.com or [](https://twitter.com/ziishaned)
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Zeeshan Ahmed](mailto:ziishaned@gmail.com)
|
Loading…
x
Reference in New Issue
Block a user