5.3 Οι Κανονικές Εκφράσεις (Regular Expressions) στη Java

Οι Κανονικές Εκφράσεις (Regular Expressions) είναι ένα ισχυρό εργαλείο που χρησιμοποιείται στη Java για την αναζήτηση, την προσαρμογή και τον έλεγχο προτύπων σε κείμενο. Οι Κανονικές Εκφράσεις είναι ακολουθίες χαρακτήρων που ορίζουν ένα πρότυπο αναζήτησης, επιτρέποντας την ανίχνευση και την εξαγωγή δεδομένων με βάση συγκεκριμένα κριτήρια.

Στη Java, η κλάση java.util.regex παρέχει τη δυνατότητα χρήσης Κανονικών Εκφράσεων. Μπορούμε να χρησιμοποιήσουμε μεθόδους όπως matches(), find(), replaceAll() και πολλές άλλες για να εκτελέσουμε διάφορες λειτουργίες σε κείμενο με βάση ένα πρότυπο που καθορίζεται από την Κανονική Εκφραση.

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

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

Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε τις Κανονικές Εκφράσεις στην Java για να αναζητήσουμε όλες τις λέξεις που ξεκινούν με το γράμμα “c” σε ένα κείμενο. Η σύνταξη της Κανονικής Εκφράσης στην Java είναι η εξής:

String regex = "^c.*";

Η παραπάνω Κανονική Έκφραση ερμηνεύεται ως εξής:

  • “^” συμβολίζει ότι η λέξη θα πρέπει να ξεκινά με το γράμμα “c”.
  • “.” συμβολίζει οποιονδήποτε χαρακτήρα.
  • “*” συμβολίζει ότι οποιοσδήποτε χαρακτήρας, συμπεριλαμβανομένου και του κενού, μπορεί να ακολουθήσει το “c”.

Χρησιμοποιώντας την Κανονική Εκφραση που ορίζει αυτό το πρότυπο, μπορούμε να ελέγξουμε εάν μια συμβολοσειρά ξεκινά με το γράμμα “c” και να επιστρέψουμε μια λίστα που περιέχει όλες τις λέξεις που ταιριάζουν σε αυτό το πρότυπο.

Μια απλή εφαρμογή των Κανονικών Εκφράσεων στην Java είναι η εύρεση της συχνότητας εμφάνισης ενός συγκεκριμένου όρου σε ένα κείμενο. Για παράδειγμα, αν θέλουμε να βρούμε πόσες φορές εμφανίζεται η λέξη “Java” σε ένα κείμενο, μπορούμε να χρησιμοποιήσουμε την ακόλουθη Κανονική Έκφραση:

String regex = "\\bJava\\b";

Η Κανονική Έκφραση που ορίζει αυτό το πρότυπο ερμηνεύεται ως εξής:

  • “\b” συμβολίζει ότι η λέξη πρέπει να είναι σε ξεχωριστή λέξη και να μην αποτελεί μέρος μιας άλλης λέξης.
  • “Java” συμβολίζει τη λέξη που αναζητούμε.

Με τη χρήση της Κανονικής Έκφρασης αυτής, μπορούμε να επιστρέψουμε τον αριθμό των φορών που εμφανίζεται η λέξη “Java” στο κείμενο.

[adinserter block=”2″]

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

  1. Αναζήτηση συμβολοσειρών που αντιστοιχούν σε ένα πρότυπο.
  2. Αντικατάσταση τμημάτων συμβολοσειρών που αντιστοιχούν σε ένα πρότυπο.
  3. Εξαγωγή τμημάτων συμβολοσειρών που αντιστοιχούν σε ένα πρότυπο.
  4. Έλεγχος της συντακτικής ορθότητας μιας συμβολοσειράς.
  5. Εξαγωγή δεδομένων από μια συμβολοσειρά βάσει ενός προτύπου.
  6. Αναδιάταξη συμβολοσειρών σε ένα συγκεκριμένο μοτίβο.

Οι Κανονικές Εκφράσεις επιτρέπουν την ευέλικτη και προηγμένη επεξεργασία συμβολοσειρών, και μπορούν να συμβάλουν σημαντικά στην αποτελεσματικότητα και λειτουργικότητα των προγραμμάτων Java.

Η Java παρέχει την κλάση java.util.regex για τη χρήση Κανονικών Εκφράσεων στην προγραμματιστική της πλατφόρμα. Αυτή η κλάση περιέχει μια σειρά από μεθόδους που μας επιτρέπουν να εκτελέσουμε ερωτήματα βασιζόμενα σε μια Κανονική Έκφραση. Για παράδειγμα, η μέθοδος compile() χρησιμοποιείται για τη δημιουργία ενός αντικειμένου Pattern που αντιστοιχεί στην Κανονική Έκφραση που ορίζουμε, ενώ η μέθοδος matcher() χρησιμοποιείται για τη δημιουργία ενός αντικειμένου Matcher που χρησιμοποιείται για την εφαρμογή της Κανονικής Έκφρασης σε μια συμβολοσειρά.

Παρακάτω δίνεται ένα παράδειγμα κώδικα στην Java για την αναζήτηση λέξεων που αρχίζουν με το γράμμα “c” σε ένα κείμενο:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
   public static void main(String[] args) {
      // Ορισμός του κειμένου που θα ελεγχθεί
      String text = "Cats are cute, but cockroaches are creepy.";
      
      // Ορισμός του προτύπου αναζήτησης (regular expression)
      String regex = "^c.*";
      
      // Δημιουργία αντικειμένου τύπου Pattern από το πρότυπο
      // και επιλογή της επιλογής CASE_INSENSITIVE για ανεξαρτησία των πεζών/κεφαλαίων
      Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
      
      // Δημιουργία αντικειμένου τύπου Matcher για αναζήτηση του προτύπου στο κείμενο
      Matcher matcher = pattern.matcher(text);
      
      // Επανάληψη μέχρι να βρεθεί αντιστοιχία
      while(matcher.find()) {
         // Εκτύπωση της αντιστοιχίας και της θέσης εμφάνισης
         System.out.println("Match found at index " + matcher.start() + " - " + matcher.group());
      }
   }
}

Ο κώδικας αυτός πραγματοποιεί αναζήτηση προτύπου (regular expression) σε ένα κείμενο και εκτυπώνει τις αντιστοιχίες που βρίσκει.

Αρχικά, ορίζεται το κείμενο που θα ελεγχθεί, στη μεταβλητή text. Στη συνέχεια, ορίζεται το πρότυπο αναζήτησης με τη χρήση μιας regular expression, στη μεταβλητή regex. Το πρότυπο που έχει οριστεί είναι "^c.*", που σημαίνει ότι η αντιστοιχία αρχίζει με το γράμμα “c” (ανεξάρτητα από τη μορφή πεζών/κεφαλαίων) και μπορεί να ακολουθούν οποιοσδήποτε χαρακτήρες.

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

Μέσω μιας επανάληψης while, ελέγχονται όλες οι αντιστοιχίες που βρέθηκαν στο κείμενο. Σε κάθε επανάληψη, η μέθοδος find() ελέγχει αν υπάρχει επόμενη αντιστοιχία. Αν υπάρχει, η μέθοδος start() επιστρέφει τη θέση έναρξης της αντιστοιχίας και η μέθοδος group() επιστρέφει την ίδια την αντιστοιχία. Στη συνέχεια, εκτυπώνεται το μήνυμα που δείχνει τη θέση και την αντιστοιχία που βρέθηκε.

Συνολικά, ο κώδικας αναζητά όλες τις αντιστοιχίες που αρχίζουν με το γράμμα “c” στο κείμενο και τις εκτυπώνει στην οθόνη. Στην περίπτωση του παραδείγματος, το μήνυμα που εκτυπώνεται είναι “Match found at index 0 – Cats are cute, but cockroaches are creepy.”

Ένα συνηθέστερο πρόβλημα που μπορεί να προκύψει κατά τη χρήση κανονικών εκφράσεων στην Java είναι η εσφαλμένη αντιμετώπιση των ειδικών χαρακτήρων, όπως οι μετακινητές αναδρομικά χαρακτήρες. Για παράδειγμα, αν χρησιμοποιήσουμε την κανονική έκφραση “\d+” για να εντοπίσουμε αριθμητικές τιμές σε ένα κείμενο, αυτή θα επιστρέψει όλους τους διαδοχικούς αριθμούς που υπάρχουν στο κείμενο. Ωστόσο, αν χρησιμοποιήσουμε την κανονική έκφραση “\d{3}” για να αναζητήσουμε ακριβώς τρία ψηφία, η έκφραση αυτή θα επιστρέψει μόνο τις αριθμητικές τιμές που αποτελούνται ακριβώς από τρία ψηφία.

[adinserter block=”3″]

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

Στον παραδείγματος κώδικα που παρουσιάζεται, οι σημαίες (flags) που χρησιμοποιούνται στη μέθοδο compile() του αντικειμένου Pattern επηρεάζουν τον τρόπο αναζήτησης. Η σημαία Pattern.CASE_INSENSITIVE επιτρέπει την αναζήτηση ανεξάρτητα από την πεζή ή κεφαλαία μορφή των γραμμάτων. Δηλαδή, τα πεζά και τα κεφαλαία γράμματα θεωρούνται ισοδύναμα κατά την αναζήτηση.

Η σημαία Pattern.LITERAL επιτρέπει την αναζήτηση ειδικών χαρακτήρων ως συνηθισμένων χαρακτήρων. Αυτό σημαίνει ότι οι ειδικοί χαρακτήρες που χρησιμοποιούνται στο πρότυπο θεωρούνται ως συνηθισμένοι χαρακτήρες και όχι ως μεταβλητοί όροι της κανονικής έκφρασης.

Τέλος, η σημαία Pattern.UNICODE_CASE χρησιμοποιείται σε συνδυασμό με τη σημαία Pattern.CASE_INSENSITIVE για να αγνοηθούν τα κεφαλαία και πεζά γράμματα που ανήκουν σε οποιοδήποτε γραμματοσειρά εκτός από το αγγλικό αλφάβητο.

Μπορούμε επίσης να αξιοποιήσουμε διάφορες άλλες σημαίες κατά την αναζήτηση με χρήση των regular expressions. Για παράδειγμα, η σημαία DOTALL μας επιτρέπει να καθορίσουμε ότι ο χαρακτήρας “.” θα ταιριάζει με οποιονδήποτε χαρακτήρα, συμπεριλαμβανομένων των χαρακτήρων νέας γραμμής. Αυτό σημαίνει ότι μπορούμε να εκτελέσουμε αναζητήσεις που διασχίζουν πολλαπλές γραμμές στο κείμενο.

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

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

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

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

Το πρώτο όρισμα της μεθόδου Pattern.compile() είναι το πρότυπο (pattern). Αυτό περιγράφει τι αναζητείται.

Τα αγκίστρα χρησιμοποιούνται για την αναζήτηση μιας σειράς χαρακτήρων:

ΈκφρασηΠεριγραφή
[abc]Βρίσκει έναν χαρακτήρα από τις επιλογές μέσα στα αγκίστρα
[^abc]Βρίσκει έναν χαρακτήρα που ΔΕΝ βρίσκεται ανάμεσα στα αγκίστρα

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

Για παράδειγμα, το πρότυπο “a.c” θα εντοπίσει οποιαδήποτε συμβολοσειρά που έχει ένα “a” στην αρχή, έναν οποιονδήποτε χαρακτήρα στη μέση και ένα “c” στο τέλος. Αντίστοιχα, το πρότυπο “ab*” θα βρει οποιαδήποτε συμβολοσειρά που ξεκινά με “a” και στη συνέχεια έχει μηδέν ή περισσότερους από τον προηγούμενο χαρακτήρα “b”.

Επιπλέον, μπορείτε να χρησιμοποιήσετε ειδικές ακολουθίες χαρακτήρων για να αναζητήσετε πολύ συγκεκριμένα πράγματα στις regular expressions. Για παράδειγμα, η ακολουθία “\d” αντιπροσωπεύει έναν ψηφίο, ενώ η ακολουθία “\s” αντιπροσωπεύει χαρακτήρες κενού χώρου, όπως τα κενά ή οι χαρακτήρες νέας γραμμής. Επίσης, μπορείτε να χρησιμοποιήσετε την ακολουθία “\b” για να αντιπροσωπεύσετε την αρχή ή το τέλος μιας λέξης.

Ένα συνηθισμένο σφάλμα που συμβαίνει με τις regular expressions είναι η μη σωστή χρήση των ειδικών χαρακτήρων. Για παράδειγμα, η χρήση του χαρακτήρα “\” για να αποφευχθεί η ειδική σημασία ενός χαρακτήρα πρέπει να γίνεται με διπλό “\” (π.χ. “\”). Αν ο χαρακτήρας “\” δεν προστατευθεί σωστά, μπορεί να οδηγήσει σε συντακτικά λάθη και προβλήματα.

Οι regular expressions είναι ένα ισχυρό εργαλείο για την αναζήτηση και προσδιορισμό συμβολοσειρών σε διάφορα σενάρια στη γλώσσα προγραμματισμού Java. Η σωστή χρήση της σύνταξής τους και η κατανόηση των ειδικών χαρακτήρων και μεταφραστικών συμβόλων που προσφέρουν είναι κρίσιμης σημασίας για την επίτευξη αποτελεσματικών και ακριβών αναζητήσεων.

[adinserter block=”4″]

Είναι σημαντικό να έχετε υπόψη ότι η απόδοση των regular expressions μπορεί να επηρεαστεί σημαντικά από τη σύνθεση και το μέγεθος της συμβολοσειράς που αναζητείται, καθώς και από την πολυπλοκότητα του προτύπου που χρησιμοποιείται. Για παράδειγμα, η αναζήτηση ενός πολύπλοκου προτύπου σε ένα μεγάλο αρχείο μπορεί να είναι χρονοβόρα και να οδηγήσει σε σοβαρή καθυστέρηση. Γι’ αυτό το λόγο, είναι σημαντικό να εξετάζετε το περιβάλλον και τις προδιαγραφές της εφαρμογής πριν από τη χρήση regular expressions και να βελτιστοποιείτε τον κώδικα όπου απαιτείται.

Οι Metacharacters είναι χαρακτήρες με ειδική σημασία στις regular expressions. Οι συνηθέστεροι Metacharacters στην Java είναι οι εξής:

ΧαρακτήραςΣημασία
.Οποιοσδήποτε χαρακτήρας, εκτός από τον χαρακτήρα νέας γραμμής
\dΒρείτε έναν ψηφίο
\DΒρείτε έναν χαρακτήρα, που δεν είναι ψηφίο
\sΒρείτε χαρακτήρες κενού χώρου
\SΒρείτε χαρακτήρες που δεν είναι κενός χώρος
\wΒρείτε χαρακτήρες λέξης (αλφαριθμητικοί χαρακτήρες)
\WΒρείτε χαρακτήρες που δεν είναι χαρακτήρες λέξης
\bΒρείτε την αρχή ή το τέλος μιας λέξης
\BΒρείτε ένα σημείο που δεν είναι αρχή ή τέλος μιας λέξης
^Βρείτε την αρχή μιας συμβολοσειράς
$Βρείτε το τέλος μιας συμβολοσειράς
[]Ορίζουν ένα εύρος χαρακτήρων
[^]Όλοι οι χαρακτήρες πλην των προσδιορισμένων

Οι μεταχαρακτήρες (metacharacters) χρησιμοποιούνται στις regular expressions για την αναζήτηση συγκεκριμένων χαρακτήρων ή συμβολοσειρών. Για παράδειγμα, ο χαρακτήρας “.” αντιπροσωπεύει οποιονδήποτε χαρακτήρα, εκτός από τον χαρακτήρα νέας γραμμής, σε μια συμβολοσειρά. Έτσι, μπορεί να χρησιμοποιηθεί για την εύρεση οποιουδήποτε χαρακτήρα που αντιστοιχεί στη θέση του “.”.

Επιπλέον, ο χαρακτήρας “\d” αναπαριστά την αναζήτηση ψηφίων. Δηλαδή, μπορεί να χρησιμοποιηθεί για να ανιχνεύσει οποιοδήποτε ψηφίο από το 0 έως το 9 σε μια συμβολοσειρά.

Ακόμη, ο χαρακτήρας “\s” αναπαριστά την αναζήτηση χαρακτήρων κενού χώρου. Αυτός ο μεταχαρακτήρας μπορεί να χρησιμοποιηθεί για να εντοπίσει κενά, διαστήματα ή οποιοδήποτε άλλον χαρακτήρα που αντιπροσωπεύει έναν χώρο σε μια συμβολοσειρά.

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

Επιπλέον, οι αγκύλες “[]” μπορούν να χρησιμοποιηθούν για να δηλώσουν ένα σύνολο χαρακτήρων. Για παράδειγμα, οι χαρακτήρες “[abc]” αντιστοιχούν σε οποιονδήποτε από τους χαρακτήρες “a”, “b” ή “c”, ενώ οι χαρακτήρες “[0-9]” αντιστοιχούν σε οποιονδήποτε αριθμητικό ψηφίο από το 0 έως το 9.

Επιπλέον, ο χαρακτήρας “^” χρησιμοποιείται για να εντοπίσει την αρχή μιας συμβολοσειράς, ενώ ο χαρακτήρας “$” χρησιμοποιείται για να εντοπίσει το τέλος μιας συμβολοσειράς. Ο χαρακτήρας “\b” χρησιμοποιείται για να εντοπίσει την αρχή ή το τέλος μιας λέξης.

Είναι σημαντικό να θυμάστε ότι ορισμένοι μεταχαρακτήρες (Metacharacters), όπως ο χαρακτήρας “.” και ο χαρακτήρας “[“, είναι ειδικοί χαρακτήρες και πρέπει να διπλασιαστούν όταν χρησιμοποιούνται ως απλοί χαρακτήρες στην αναζήτηση. Για παράδειγμα, αν θέλετε να βρείτε έναν χαρακτήρα “[” σε μια συμβολοσειρά, πρέπει να τον γράψετε τρεις φορές, δηλαδή “[[[“.

[adinserter block=”5″]

Μπορείτε επίσης να συνδυάσετε μεταχαρακτήρες (Metacharacters) για πιο περίπλοκες αναζητήσεις. Για παράδειγμα, οι χαρακτήρες “\b\w+\b” θα αντιστοιχούν σε οποιαδήποτε λέξη σε μια συμβολοσειρά.

Επιπλέον, ο χαρακτήρας “\” χρησιμοποιείται για τη διαφυγή (escape) των μεταχαρακτήρων, ώστε να αναζητήσετε τον ίδιο τον χαρακτήρα αντί για τη σημασία του ως μεταχαρακτήρα. Για παράδειγμα, αν θέλετε να αναζητήσετε τον χαρακτήρα “.”, πρέπει να χρησιμοποιήσετε τη σύνταξη “.”.

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

Οι Quantifiers καθορίζουν τις ποσότητες των επαναλήψεων στο πλαίσιο των ρυθμίσεων αναζήτησης. Εδώ είναι μερικά παραδείγματα Quantifiers:

QuantifierΠεριγραφή
n+Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιέχει τουλάχιστον ένα n
n*Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιέχει μηδενικές ή περισσότερες εμφανίσεις του n
n?Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιέχει μηδενικές ή μία εμφάνιση του n
n{x}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει μια ακολουθία X n
n{x,y}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει μια ακολουθία από X έως Y εμφανίσεις του n
n{x,}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει μια ακολουθία από τουλάχιστον X εμφανίσεις του n

Συνεχίζοντας, υπάρχουν και άλλα Quantifiers που μπορείτε να χρησιμοποιήσετε στα πρότυπά σας:

QuantifierΠεριγραφή
n{0,1}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει μηδενικές ή μία εμφάνιση του n
n{0,}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει μηδενικές ή περισσότερες εμφανίσεις του n
n{1,}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει τουλάχιστον μία εμφάνιση του n
n{X}Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει ακριβώς X εμφανίσεις του n
n+?Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιέχει τουλάχιστον μία εμφάνιση του n, σε ακριβή αντιστοίχιση
n*?Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιέχει μηδενικές ή περισσότερες εμφανίσεις του n, σε ακριβή αντιστοίχιση
n??Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιέχει μηδενικές ή μία εμφάνιση του n, σε ακριβή αντιστοίχιση

Συνεχίζοντας, ορισμένα ακόμη Quantifiers που μπορείτε να χρησιμοποιήσετε είναι:

QuantifierΠεριγραφή
n{X,Y}?Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που περιλαμβάνει μια ακολουθία από τουλάχιστον X εμφανίσεις του n, αλλά όχι περισσότερες από Y εμφανίσεις, σε ακριβή αντιστοίχιση
n$Αντιστοιχεί σε οποιαδήποτε συμβολοσειρά που τελειώνει με τον χαρακτήρα n
^nΑντιστοιχεί σε οποιαδήποτε συμβολοσειρά που αρχίζει με τον χαρακτήρα n
?=nΑντιστοιχεί σε οποιαδήποτε συμβολοσειρά που ακολουθείται από τον χαρακτήρα n
?!nΑντιστοιχεί σε οποιαδήποτε συμβολοσειρά που ΔΕΝ ακολουθείται από τον χαρακτήρα n

Σημείωση: Η χρήση των Quantifiers είναι σημαντική στην αναζήτηση συμβολοσειρών και στη διαχείριση των δεδομένων.

16 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων