# שגיאות הידור של regex כל אבחון בדף זה מגיע ממהדר התבניות. ביטוי רגולרי מהודר לפני שהוא רץ, ותבנית פגומה מתה בנקודה זו - לפני שההתאמה בכלל מנוסה. השגיאות כולן קטלניות (**F**); ללכוד אותן עם `eval` אם בונים תבניות מקלט לא־מהימן: ```perl 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)** מבנה של קבוצה בעלת שם (`(?...)`, `\k`) רץ עד סוף התבנית מבלי לסגור את מתחם השם שלו. ### ``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` או `\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` ו־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...)` / `(?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 מסוג `(?<=...)` / `(?