שגיאות הידור של 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) מבנה תחום בתוך התבנית רץ עד סוף הקלט ללא מתחם הסגירה שלו.