Κεφάλαιο 15. Κανονικές εκφράσεις
Προηγ |  | Επόμενο

# Κεφάλαιο 15. Κανονικές εκφράσεις

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

### Σημείωση

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

Πίνακας 15.1. Regex - Flags

Το construct | ... αντιστοιχίζει τα εξής
--- | ---
(?i) | Επιτρέπει την αντιστοίχιση ανεξαρτήτως μικρών-κεφαλαίων γραμμάτων (case-insensitive). Από προεπιλογή, το μοτίβο είναι case-sensitive).

Πίνακας 15.2. Regex - Χαρακτήρας

Το construct | ... αντιστοιχίζει τα εξής
--- | ---
x | Τον χαρακτήρα x, εκτός από τα παρακάτω...
\uhhhh | Τον χαρακτήρα με δεκαεξαδική τιμή 0xhhhh
\t | Τον χαρακτήρα tab ('\u0009')
\n | Τον χαρακτήρα για νέα γραμμή (line feed) ('\u000A')
\r | Τον χαρακτήρα για αλλαγή γραμμής/ carriage-return ('\u000D')
\f | Τον χαρακτήρα για τροφοδότηση φόρμας/form-feed ('\u000C')
\a | Τον χαρακτήρα alert (bell) ('\u0007')
\e | Τον χαρακτήρα διαφυγής /escape ('\u001B')
\cx | Τον χαρακτήρα ελέγχου που αντιστοιχεί στο x
\0n | Τον χαρακτήρα με οκταδική τιμή 0n (0 <= n <= 7)
\0nn | Τον χαρακτήρα με οκταδική τιμή 0nn (0 <= n <= 7)
\0mnn | Τον χαρακτήρα με οκταδική τιμή 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh | Τον χαρακτήρα με δεκαεξαδική τιμή 0xhh

Πίνακας 15.3. Regex - Quotation

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
\ | Τίποτε, αλλά παραθέτει τον εξής χαρακτήρα. Αυτό απαιτείται αν θέλετε να εισάγετε οποιονδήποτε από τους μετα χαρακτήρες !$()*+.<>?[\]^{|} για να αντιστοιχίζονται ως οι εαυτοί τους.
\\ | Για παράδειγμα, αυτός είναι ο χαρατκήρας backslash
\Q | Τίποτε, αλλά παραθέτει όλους τους χαρακτήρες μέχρι το \E
\E | Τίποτε, αλλά τελειώνει παραθέτοντας ότι άρχισε με το \Q

Πίνακας 15.4. Regex - Κλάσεις για Unicode blocks και κατηγορίες

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
\p{InGreek} | Έναν χαρακτήρα στο Greek block (απλό block)
\p{Lu} | Ένα κεφαλαίο γράμμα (απλό category)
\p{Sc} | 'Ενα σύμβολο νομίσματος
\P{InGreek} | Οποιονδήποτε χαρακτήρα εκτός από έναν που βρίσκεται στο Greek block (άρνηση)
[\p{L}&&[^\p{Lu}]] | Οποιοδήποτε γράμμα εκτός από κεφαλαία γράμματα (αφαίρεση)

Πίνακας 15.5. Regex - Κλασεις χαρακτήρων

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
[abc] | a, b, ή c (απλή κλάση)
[^abc] | Οποιονδήποτε χαρακτήρα εκτός από a, b, ή c (άρνηση)
[a-zA-Z] | από το a μέχρι το z ή από το A μέχρι το Z, περιλαμβανομένου του (range)

Πίνακας 15.6. Regex - Προκαθορισμένες κλάσεις χαρακτήρων

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
. | Οποιονδήποτε χαρακτήρα (εκτός από line terminators)
\d | Ένα ψηφίο: [0-9]
\D | Ένα μη-ψηφίο: [^0-9]
\s | Έναν χαρακτήρα κενού διαστήματος: [ \t\n\x0B\f\r]
\S | Έναν χαρακτήρα μη-κενού διαστήματος: [^\s]
\w | Έναν χαρακτήρα λέξη: [a-zA-Z_0-9]
\W | Έναν χαρακτήρα μη-λέξη: [^\w]

Πίνακας 15.7. Regex - Boundary matchers

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
^ | Η αρχή μιας γραμμής
$ | Το τέλος μιας γραμμής
\b | Ένα όριο μιας λέξης
\B | Ένα όριο μιας μη-λέξης

Πίνακας 15.8. Regex - 'Άπληστοι ποσοτικοποιητές' (greedy quantifiers)

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
X? | X, άπαξ ή καθόλου
X* | X, μηδέν ή περισσότερες φορές
X+ | X, μηδέν ή περισσότερες φορές

### Σημείωση

Οι 'άπληστοι ποσοτικοποιητές' (greedy quantifiers) θα αντιστοιχίσουν όσο περισσότερο μπορούν. Για παράδειγμα, το a+? θα αντιστοιχίσει το aaa στο aaabbb

Πίνακας 15.9. Regex - Απρόθυμοι (Reluctant) 'μη-άπληστοι ποσοτικοποιητές'

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
X?? | X, άπαξ ή καθόλου
X*? | X, μηδέν ή περισσότερες φορές
X+? | X, μηδέν ή περισσότερες φορές

### Σημείωση

Οι 'μη-άπληστοι ποσοτικοποιητές' θα αντιστοιχίσουν όσο λιγώτερο μπορούν. Για παράδειγμα, το a+? θα αντιστοιχίσει πρώτα το a στο aaabbb

Πίνακας 15.10. Regex - Λογικοί τελεστές

Το construct | ...αντιστοιχίζει τα εξής
--- | ---
XY | X ακολουθούμενο από το Y
X|Y | Είτε X ή Y
(XY) | XY ως μια ενιαία ομάδα

## 1. Εργαλεία Regex και Παραδείγματα χρήσης

Είναι διαθέσιμα αρκετά διαδραστικά εργαλεία για την ανάπτυξη και δοκιμή κανονικών εκφράσεων. Ακολουθούν, εν πολλοίς, το ίδιιο μοτίβο (για ένα παράδειγμα από τον Δοκιμαστή Κανονικών Εκφράσεων βλέπε πιο κάτω): η κανονική έκφραση (καταχώρηση στην κορυφή) αναλύει το κείμενο αναζήτησης (Πλαίσιο κειμένου στη μέση), αποδίδοντας τα hits, που εμφανίζονται στο Πλαίσο αποτελεσμάτων κειμένου.

Σχήμα 15.1. Δοκιμαστής Regex

Βλέπε Ο προπονητής Regex Coach εκδόσεις για Windows,Linux, FreeBSD ενός stand-alone εργαλείου. Αυτό είναι πολύ παρόμοιο με το παραπάνω παράδειγμα.

Μπορείτε να βρείτε μια ωραία συλλογή με χρήσιμες περιπτώσεις regex στο ίδιο το OmegaT (βλέπε επιλογές > Κατάτμηση). Η ακόλουθη λίστα περιλαμβάνει εκφράσεις που μπορεί να σας φανούν χρήσιμες όταν κάνετε αναζήτηση μέσα στη μεταφραστική μνήμη.

Πίνακας 15.11. Regex - Παραδείγματα κανονικής έκφρασης σε μεταφράσεις

Κανονική έκφραση (regex) | Βρίσκει τα εξής:
--- | ---
(\b\w+\b)\s\1\b | διπλές λέξεις
[\.,]\s*[\.,]+ | κώμμα ή τελεία, ακολουθούμενο από διαστήματα και από ακόμη ένα κώμμα ή τελεία
\. \s+$ | επιπλέον διαστήματα μετά από μια τελεία στο τέλος της γραμμής
\s+a\s+[aeiou] | Αγγλικά: οι λέξεις που αρχίζουν με φωνήεντα, θα πρέπει γενικά να προγούνται από "an" και όχι από "a"
\s+an\s+[^aeiou] | Αγγλικά: ο ίδιος έλεγχος όπως κα πιο πάνω, αλλά για σύμφωνα ("a", και όχι "an")
\s{2,} | περισσότερα από ένα διάστημα
\.[A-Z] | Τελεία που ακολουθείται από έναν κεφαλαίο γράμμα - πιθανώς, λείπει ένα διάστημα ανάμεσα στην τελεία και την αρχή μιας νέας προτασης;
\bis\b | αναζήτηση για “is”, όχι για “this” ή για “isn't” κλπ.

Προηγ |  | Επόμενο
Κεφάλαιο 14. Αναζητήσεις | Αρχή | Κεφάλαιο 16. Λεξικά