Σφάλματα μεταγλώττισης regex#

Κάθε διαγνωστικό σε αυτή τη σελίδα προέρχεται από τον μεταγλωττιστή μοτίβων. Μια κανονική έκφραση μεταγλωττίζεται πριν εκτελεστεί, και ένα κακοσχηματισμένο μοτίβο τερματίζεται σε εκείνο το σημείο - πριν καν επιχειρηθεί η αντιστοίχιση. Τα σφάλματα είναι όλα μοιραία (F)· παγιδεύστε τα με eval αν χτίζετε μοτίβα από μη έμπιστη είσοδο:

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) Μια κατασκευή ονομασμένης ομάδας ((?<name>...), \k<name>) έφτασε στο τέλος του μοτίβου χωρίς να κλείσει τον οριοθέτη του ονόματός της.

`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<name> ή \g{name} αναφέρεται σε μια ονομασμένη ομάδα που δεν ορίστηκε ποτέ.

`Reference to nonexistent or invalid group`#

(F) Μια αναφορά ομάδας δεν μπόρεσε να επιλυθεί σε καμία ομάδα.

`Expected '<' or '\'' after \k` / `Expected '}' after \k{`#

(F) Μια ονομαστική οπισθαναφορά \k πρέπει να γράφεται \k<name>, \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<name>...) / (?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) Μια οπίσθια διεκδίκηση (?<=...) / (?<!...) της οποίας το περιεχόμενο μπορεί να ταιριάξει μεταβλητό αριθμό χαρακτήρων. Η PetaPerl, όπως και η upstream Perl, απαιτεί οπίσθια διεκδίκηση σταθερού μήκους. Ξαναγράψτε την οπίσθια διεκδίκηση σε σταθερό πλάτος, ή χρησιμοποιήστε \K για να σημειώσετε ένα σημείο διατήρησης.

Ρήματα#

`Unterminated verb`#

(F) Ένα ρήμα ελέγχου (*VERB) / (*VERB:ARG) δεν έκλεισε.

Γενικής χρήσης#

`Regex compilation error at position %d: %s` / `Regular expression error`#

(F) Ένα σφάλμα μεταγλώττισης με ετικέτα θέσης για περιπτώσεις που δεν καλύπτουν τα πιο συγκεκριμένα μηνύματα παραπάνω. Το κείμενο που ακολουθεί ονομάζει το υποκείμενο πρόβλημα.

`Unterminated string in %s`#

(F) Μια οριοθετημένη κατασκευή μέσα στο μοτίβο έφτασε στο τέλος της εισόδου χωρίς τον τερματικό οριοθέτη της.

Δείτε επίσης#

  • qr - προμεταγλωττίστε ένα μοτίβο ώστε ένα κακοσχηματισμένο να αποτυγχάνει μία φορά, κατά τη μεταγλώττιση, αντί σε κάθε αντιστοίχιση.

  • m - ο τελεστής αντιστοίχισης· ο ίδιος μεταγλωττιστής απορρίπτει ένα κακοσχηματισμένο μοτίβο εδώ.

  • s - ο τελεστής αντικατάστασης, του οποίου το μισό μοτίβο μεταγλωττίζεται από την ίδια μηχανή.

  • Προειδοποιήσεις - τα μη μοιραία διαγνωστικά regex (Useless use of \E, Invalid character in group name).