שגיאות הידור של regex#

כל אבחון בדף זה מגיע ממהדר התבניות. ביטוי רגולרי מהודר לפני שהוא רץ, ותבנית פגומה מתה בנקודה זו - לפני שההתאמה בכלל מנוסה. השגיאות כולן קטלניות (F); ללכוד אותן עם eval אם בונים תבניות מקלט לא־מהימן:

my $re = eval { qr/$user_pattern/ };
die "bad pattern: $@" unless $re;

Perl מהמעלה־הזרם מוסיף סיומת marked by <-- HERE in m/.../ המצביעה על המיקום הפוגע. PetaPerl מדווחת על אותן שגיאות; עיצוב סמן־המיקום המדויק עשוי להיות שונה.

שגיאות מבניות נפוצות#

`Unmatched ) in regex`#

(F) ל־) בתבנית אין ( תואם. בדרך כלל שגיאת הקלדה או סוגר מילולי ללא escape. כדי להתאים ) מילולי, יש לבצע לו escape כ־\) או למקם אותו במחלקת תווים [)].

`Quantifier follows nothing in regex`#

(F) מכמת (*, +, ?, {n,m}) הופיע ללא דבר לפניו לחזור עליו - לדוגמה /*abc/ או /(?:)+/ על קבוצה ריקה. כמתו * מילולי על ידי ביצוע escape: /\*/.

`Unterminated group`#

(F) ( פתח קבוצה שהתבנית לעולם אינה סוגרת. יש לאזן את הסוגריים.

`Unterminated character class`#

(F) [ פתח מחלקת תווים ללא ] סוגר. כדי להתאים ] מילולי, יש למקם אותו ראשון במחלקה ([]x]) או לבצע לו escape ([\]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) escape של לוכסן אחורי נקטע על ידי סוף התבנית.

שגיאות מחלקת תווים וטווח#

`Invalid [] range "%s" in regex`#

(F) טווח תווים בתוך [...] רץ לאחור (מגבוה לנמוך), כמו ב־[z-a]. יש לסדר את נקודות הקצה מנמוך לגבוה, או לבצע escape ל־- כדי להתאים אותו מילולית.

`Invalid range endpoint in character class`#

(F) קצה אחד של טווח - אינו תו יחיד (לדוגמה escape רב־תווי המשמש כנקודת קצה).

`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) [::] ללא דבר בין הנקודתיים.

escape של תווי בקרה ו־escape מספריים#

`Missing control char`#

(F) escape מסוג \c לא לוּוה בתו שעליו לבקר, כמו בתבנית המסתיימת ב־\c.

`Missing control character after \c`#

(F) אותה סיבה כמו לעיל, מנקודה אחרת במהדר: \c זקוק לתו עוקב אחד.

`Invalid control character '\c%s'`#

(F) התו שאחרי \c אינו תו ש־\c מקבל.

`Invalid octal escape`#

(F) escape אוקטלי מסוג \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) escape מסוג \o{...} אינו מסויים או נוקב בנקודת קוד מחוץ לטווח התקף.

`Invalid hex escape` / `Invalid hex digit` / `Expected '}' in hex escape`#

(F) escape מסוג \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 ו־escape של יוניקוד#

`\N in character class requires braces`#

(F) בתוך [...], \N חייב להיכתב \N{...}; הצורה החשופה ״any non-newline״ אינה מותרת במחלקה.

`\N{NAME} not supported in character class`#

(F) escape של תו בעל שם \N{NAME} אינו מותר בתוך מחלקת תווים.

`Expected '}' after \N{` / `Empty \N{U+} escape`#

(F) escape מסוג \N{...} אינו מסויים או של־\N{U+} אין ספרות הקסדצימליות.

`Invalid hex in \N{U+...}` / `Invalid Unicode code point in \N{U+...}`#

(F) ההקס בתוך \N{U+...} פגום או נוקב בנקודת קוד מחוץ לטווח יוניקוד.

`Invalid Unicode code point`#

(F) escape של נקודת קוד נוקב בערך מעל למקסימום של יוניקוד (0x10FFFF).

`Empty Unicode property name` / `Unknown Unicode property name`#

(F) escape של תכונה מסוג \p{...} / \P{...} ריק או נוקב בתכונה ש־PetaPerl אינה מזהה.

מבני (?...) מורחבים#

`Invalid flag after (?^` / `Invalid flag character`#

(F) קבוצה קובעת־דגלים (?flags) או (?^flags:...) מכילה תו שאינו מתאם תבנית תקף.

`Expected '{' after (??`#

(F) מבנה תת־תבנית נדחית (??{ code }) פגום.

`Expected '<', '=', or '>' after (?P`#

(F) מבנה בסגנון פייתון (?P<name>...) / (?P=name) / (?P>name) פגום.

`Expected DEFINE after (?(` / `Expected ')' after DEFINE`#

(F) בלוק (?(DEFINE)...) פגום.

`Switch condition not recognized in regex` / `Invalid lookaround condition`#

(F) התנאי במבנה מותנה (?(...)...) אינו צורה מזוהה (מספר קבוצה, lookaround, 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} אינו מסויים או מכיל תו בלתי צפוי.

Lookbehind#

`Variable length lookbehind not implemented`#

(F) lookbehind מסוג (?<=...) / (?<!...) שתוכנו יכול להתאים למספר משתנה של תווים. PetaPerl, כמו Perl מהמעלה־הזרם, דורשת lookbehind באורך קבוע. יש לכתוב מחדש את ה־lookbehind לרוחב קבוע, או להשתמש ב־\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).