# Σφάλματα μεταγλώττισης regex Κάθε διαγνωστικό σε αυτή τη σελίδα προέρχεται από τον μεταγλωττιστή μοτίβων. Μια κανονική έκφραση μεταγλωττίζεται πριν εκτελεστεί, και ένα κακοσχηματισμένο μοτίβο τερματίζεται σε εκείνο το σημείο - πριν καν επιχειρηθεί η αντιστοίχιση. Τα σφάλματα είναι όλα μοιραία (**F**)· παγιδεύστε τα με `eval` αν χτίζετε μοτίβα από μη έμπιστη είσοδο: ```perl my $re = eval { qr/$user_pattern/ }; die "bad pattern: $@" unless $re; ``` Η upstream Perl προσαρτά ένα επίθημα ` marked by <-- HERE in m/.../` που δείχνει την προβληματική θέση. Η PetaPerl αναφέρει τα ίδια σφάλματα· η ακριβής μορφοποίηση του δείκτη θέσης μπορεί να διαφέρει. ## Συνηθισμένα δομικά σφάλματα ### ``Unmatched ) in regex`` **(F)** Ένα `)` στο μοτίβο δεν έχει αντίστοιχο `(`. Συνήθως ένα τυπογραφικό λάθος ή μια κυριολεκτική παρένθεση χωρίς διαφυγή. Για να ταιριάξετε ένα κυριολεκτικό `)`, διαφύγετέ το ως `\)` ή βάλτε το σε μια κλάση χαρακτήρων `[)]`. ### ``Quantifier follows nothing in regex`` **(F)** Ένας ποσοδείκτης (`*`, `+`, `?`, `{n,m}`) εμφανίστηκε χωρίς τίποτα μπροστά του για να επαναλάβει - για παράδειγμα `/*abc/` ή `/(?:)+/` σε μια κενή ομάδα. Ποσοδεικτήστε ένα κυριολεκτικό `*` διαφεύγοντάς το: `/\*/`. ### ``Unterminated group`` **(F)** Ένα `(` άνοιξε μια ομάδα που το μοτίβο δεν κλείνει ποτέ. Ισορροπήστε τις παρενθέσεις. ### ``Unterminated character class`` **(F)** Ένα `[` άνοιξε μια κλάση χαρακτήρων χωρίς κλείσιμο `]`. Για να ταιριάξετε ένα κυριολεκτικό `]`, τοποθετήστε το πρώτο στην κλάση (`[]x]`) ή διαφύγετέ το (`[\]x]`). ### ``Unterminated comment group`` **(F)** Μια ομάδα σχολίου `(?#...)` άνοιξε αλλά δεν έκλεισε με `)`. ### ``Unterminated conditional pattern`` **(F)** Μια κατασκευή `(?(condition)yes|no)` έμεινε ανοιχτή. ### ``Unterminated group name`` **(F)** Μια κατασκευή ονομασμένης ομάδας (`(?...)`, `\k`) έφτασε στο τέλος του μοτίβου χωρίς να κλείσει τον οριοθέτη του ονόματός της. ### ``Unrecognized group type`` **(F)** Οι χαρακτήρες μετά το `(?` δεν σχηματίζουν έναν τύπο ομάδας που γνωρίζει η PetaPerl. Ελέγξτε τη γραφή `(?...)` σε σχέση με την αναφορά regex. ### ``Unexpected end of character class`` **(F)** Το μοτίβο τελείωσε στη μέση μιας κλάσης `[...]`. ### ``Unexpected end of escape sequence`` **(F)** Μια διαφυγή με ανάστροφη κάθετο διακόπηκε από το τέλος του μοτίβου. ## Σφάλματα κλάσης χαρακτήρων και ευρών ### ``Invalid [] range "%s" in regex`` **(F)** Ένα εύρος χαρακτήρων μέσα στο `[...]` τρέχει αντίστροφα (από υψηλό σε χαμηλό), όπως στο `[z-a]`. Διατάξτε τα ακραία σημεία από χαμηλό σε υψηλό, ή διαφύγετε το `-` για να το ταιριάξετε κυριολεκτικά. ### ``Invalid range endpoint in character class`` **(F)** Το ένα άκρο ενός εύρους `-` δεν είναι ένας μοναδικός χαρακτήρας (για παράδειγμα μια διαφυγή πολλών χαρακτήρων που χρησιμοποιείται ως ακραίο σημείο). ### ``POSIX class [:%s:] unknown`` **(F)** Μια κλάση POSIX `[:name:]` ονομάζει μια κλάση που δεν υπάρχει. Τα έγκυρα ονόματα είναι `alpha`, `digit`, `alnum`, `space`, `upper`, `lower`, `punct`, `print`, `graph`, `cntrl`, `xdigit`, `blank`, `word`, και `ascii`. Ένα σκέτο `[:alpha:]` εκτός κάποιου άλλου `[...]` είναι επίσης σφάλμα - οι κλάσεις POSIX λειτουργούν μόνο *μέσα* σε μια κλάση χαρακτήρων: `[[:alpha:]]`. ### ``Empty POSIX character class name`` **(F)** Ένα `[::]` χωρίς τίποτα ανάμεσα στις άνω-κάτω τελείες. ## Διαφυγές χαρακτήρων ελέγχου και αριθμητικές διαφυγές ### ``Missing control char`` **(F)** Μια διαφυγή `\c` δεν ακολουθήθηκε από τον χαρακτήρα που έπρεπε να ελέγξει, όπως σε ένα μοτίβο που τελειώνει σε `\c`. ### ``Missing control character after \c`` **(F)** Ίδια αιτία με την παραπάνω, από διαφορετικό σημείο στον μεταγλωττιστή: το `\c` χρειάζεται έναν χαρακτήρα να ακολουθεί. ### ``Invalid control character '\c%s'`` **(F)** Ο χαρακτήρας μετά το `\c` δεν είναι ένας που αποδέχεται το `\c`. ### ``Invalid octal escape`` **(F)** Μια οκταδική διαφυγή `\0`/`\o` είναι κακοσχηματισμένη. ### ``Invalid octal digit in \o{}`` **(F)** Ένα ψηφίο μέσα στο `\o{...}` δεν είναι 0–7. ### ``Expected '{' after \o`` **(F)** Το `\o` πρέπει να ακολουθείται από `{`, όπως στο `\o{17}`. ### ``Expected '}' in \o{}` and ``Invalid Unicode code point in \o{}`` **(F)** Μια διαφυγή `\o{...}` δεν τερματίζεται ή ονομάζει ένα σημείο κώδικα εκτός του έγκυρου εύρους. ### ``Invalid hex escape`` / ``Invalid hex digit`` / ``Expected '}' in hex escape`` **(F)** Μια διαφυγή `\x` είναι κακοσχηματισμένη: ένα μη δεκαεξαδικό ψηφίο, ή ένα μη τερματισμένο `\x{...}`. ## `\g`, `\k`, και αναφορές ομάδων ### ``\g0 is not allowed`` and ``\g{0} is not allowed`` **(F)** Η ομάδα 0 είναι ολόκληρη η αντιστοιχία και δεν μπορεί να γίνει οπισθαναφορά σε αυτήν. Αναφερθείτε σε μια πραγματική ομάδα σύλληψης (`\g1`, `\g{name}`). ### ``Invalid group number in \g`` / ``Invalid group number in \g{}`` **(F)** Ο αριθμός μετά το `\g` δεν είναι έγκυρη αναφορά ομάδας. ### ``Expected digit or '{' after \g`` / ``Expected '}' after \g{`` **(F)** Το `\g` πρέπει να ακολουθείται από ένα ψηφίο, ένα πρόσημο, ή `{name}`. ### ``Reference to nonexistent group number %d`` **(F)** Μια οπισθαναφορά τύπου `\g`/`\1` ονομάζει έναν αριθμό ομάδας που δεν περιέχει το μοτίβο. ### ``Reference to nonexistent group (relative offset %d)`` **(F)** Μια σχετική οπισθαναφορά (`\g{-2}`) δείχνει πέρα από τις ομάδες που υπάρχουν. ### ``Reference to nonexistent named group '%s'`` **(F)** Ένα `\k` ή `\g{name}` αναφέρεται σε μια ονομασμένη ομάδα που δεν ορίστηκε ποτέ. ### ``Reference to nonexistent or invalid group`` **(F)** Μια αναφορά ομάδας δεν μπόρεσε να επιλυθεί σε καμία ομάδα. ### ``Expected '<' or '\'' after \k`` / ``Expected '}' after \k{`` **(F)** Μια ονομαστική οπισθαναφορά `\k` πρέπει να γράφεται `\k`, `\k'name'`, ή `\k{name}`. ## Ονομασμένες ομάδες ### ``Empty group name`` **(F)** Μια ονομασμένη ομάδα `(?<>...)` ή αναφορά έχει κενές αγκύλες ονόματος. ### ``Group name must not start with a digit`` **(F)** Τα ονόματα ομάδων ακολουθούν τους κανόνες των αναγνωριστικών· δεν μπορούν να ξεκινούν με ψηφίο. ## `\N` και διαφυγές Unicode ### ``\N in character class requires braces`` **(F)** Μέσα στο `[...]`, το `\N` πρέπει να γράφεται `\N{...}`· η σκέτη μορφή «οποιοσδήποτε χαρακτήρας εκτός newline» δεν επιτρέπεται σε μια κλάση. ### ``\N{NAME} not supported in character class`` **(F)** Μια διαφυγή ονομασμένου χαρακτήρα `\N{NAME}` δεν επιτρέπεται μέσα σε μια κλάση χαρακτήρων. ### ``Expected '}' after \N{`` / ``Empty \N{U+} escape`` **(F)** Μια διαφυγή `\N{...}` δεν τερματίζεται ή το `\N{U+}` δεν έχει δεκαεξαδικά ψηφία. ### ``Invalid hex in \N{U+...}`` / ``Invalid Unicode code point in \N{U+...}`` **(F)** Το δεκαεξαδικό μέσα στο `\N{U+...}` είναι κακοσχηματισμένο ή ονομάζει ένα σημείο κώδικα εκτός του εύρους Unicode. ### ``Invalid Unicode code point`` **(F)** Μια διαφυγή σημείου κώδικα ονομάζει μια τιμή πάνω από το μέγιστο του Unicode (`0x10FFFF`). ### ``Empty Unicode property name`` / ``Unknown Unicode property name`` **(F)** Μια διαφυγή ιδιότητας `\p{...}` / `\P{...}` είναι κενή ή ονομάζει μια ιδιότητα που δεν αναγνωρίζει η PetaPerl. ## Εκτεταμένες κατασκευές `(?...)` ### ``Invalid flag after (?^`` / ``Invalid flag character`` **(F)** Μια ομάδα ορισμού σημαιών `(?flags)` ή `(?^flags:...)` περιέχει έναν χαρακτήρα που δεν είναι έγκυρος τροποποιητής μοτίβου. ### ``Expected '{' after (??`` **(F)** Μια κατασκευή αναβεβλημένου υπομοτίβου `(??{ code })` είναι κακοσχηματισμένη. ### ``Expected '<', '=', or '>' after (?P`` **(F)** Η κατασκευή τύπου Python `(?P...)` / `(?P=name)` / `(?P>name)` είναι κακοσχηματισμένη. ### ``Expected DEFINE after (?(`` / ``Expected ')' after DEFINE`` **(F)** Ένα μπλοκ `(?(DEFINE)...)` είναι κακοσχηματισμένο. ### ``Switch condition not recognized in regex`` / ``Invalid lookaround condition`` **(F)** Η συνθήκη σε ένα υπό συνθήκη `(?(...)...)` δεν είναι αναγνωρισμένη μορφή (ένας αριθμός ομάδας, μια διεκδίκηση περιβλέπουσας, `R`, ή `DEFINE`). ### Οικογένεια ``Expected ')' after condition`` **(F)** Η συνθήκη μιας υπό συνθήκη κατασκευής δεν έκλεισε με `)`. Οι παραλλαγές - ``Expected ')' after (?(R...)``, ``Expected ')' after code block condition``, ``Expected ')' after lookahead condition``, ``Expected ')' after lookbehind condition``, ``Expected '=' or '!' after (?(<`` - αναφέρουν όλες το ίδιο σχήμα σφάλματος σε διαφορετικούς τύπους συνθηκών. ## Άγκιστρα ποσοδείκτη ### ``Expected '}' after quantifier`` / ``Expected '}' or ',' in quantifier`` **(F)** Ένας ποσοδείκτης `{n,m}` δεν τερματίζεται ή περιέχει έναν μη αναμενόμενο χαρακτήρα. ## Οπίσθια διεκδίκηση ### ``Variable length lookbehind not implemented`` **(F)** Μια οπίσθια διεκδίκηση `(?<=...)` / `(?