perlrebackslash - מקוון בענן

זהו הפקודה perlrebackslash שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

תָכְנִית:

שֵׁם


perlrebackslash - Perl Expression Regular Expression Backslash Sequences and Escapes

תיאור


התיעוד ברמה העליונה על ביטויים רגולריים של Perl נמצא ב-perlre.

מסמך זה מתאר את כל רצפי ההלוכסן האחורי והבריחה. לאחר הסבר על תפקידו של
הנטוי האחורי, הוא מפרט את כל הרצפים שיש להם משמעות מיוחדת ב- Perl regular
ביטויים (בסדר אלפביתי), ואז מתאר כל אחד מהם.

רוב הרצפים מתוארים בפירוט במסמכים שונים; המטרה העיקרית של זה
המסמך יכלול מדריך עזר מהיר המתאר את כל רצפי ההלוכסן האחורי והבריחה.

השמיים מַהֲלָך סְרָק
בביטוי רגולרי, הנטוי האחורי יכול לבצע אחת משתי משימות: או שהוא מוריד
המשמעות המיוחדת של התו העוקב אחריו (לדוגמה, "\|" תואם אנכי
סרגל, זה לא חלופי), או שזו ההתחלה של רצף קו נטוי או בריחה.

הכללים הקובעים מה זה הם די פשוטים: אם הדמות הבאה אחרי
קו נטוי אחורי הוא תו ASCII פיסוק (שאיננו מילה) (כלומר, כל דבר שאינו
אות, ספרה או קו תחתון), ואז ההלוכסן האחורי פשוט מסיר כל משמעות מיוחדת של
הדמות שעוקבת אחריו.

אם התו העוקב לאחור הוא אות ASCII או ספרת ASCII, אז
רצף עשוי להיות מיוחד; אם כן, זה רשום למטה. עדיין לא נעשה שימוש בכמה אותיות,
אז הבריחה מהם עם קו נטוי לא משנה אותם להיות מיוחדים. גרסה עתידית של
Perl עשויה להקצות להם משמעות מיוחדת, כך שאם מופעלות לך אזהרות, Perl בעיה
אזהרה אם אתה משתמש ברצף כזה. [1].

עם זאת, מובטח שלסיקוונס לאחור או בריחה לעולם לא יהיו סימני פיסוק
דמות בעקבות הנטוי האחורי, לא עכשיו, ולא בגרסה עתידית של Perl 5. אז זה
בטוח לשים קו נטוי לפני דמות שאינה מילה.

שימו לב שהלוכסן האחורי עצמו מיוחד; אם אתה רוצה להתאים קו נטוי, אתה חייב
בריחה מהלוכסן האחורי עם נטוי אחורי: "/\\/" מתאים לאחור בודד.

[1] יש חריג אחד. אם אתה משתמש בתו אלפאנומרי כמפריד שלך
דפוס (שכנראה לא כדאי לעשות מטעמי קריאה), אתה צריך לברוח
המפריד אם ברצונך להתאים אותו. פרל לא תזהיר אז. ראה גם "פרטים עגומים של
ניתוח מבנים מובאים" ב-perlop.

הכל מה היא רצפים ו בורח
אלה שאינם ניתנים לשימוש בתוך מחלקת תווים בסוגריים (כמו "[\da-z]") מסומנים כ"לא ב
[]."

\000 רצף בריחה אוקטלי. ראה גם \o{}.
\1 הפניה לאחור מוחלטת. לא ב [].
\a אזעקה או פעמון.
\A תחילת מיתר. לא ב [].
\b{}, \b גבול. (\b הוא רווח אחורי ב-[]).
\B{}, \B לא גבול. לא ב [].
\cX Control-X.
\C אוקטט בודד, אפילו תחת UTF-8. לא ב [].
(הוצא משימוש)
\d מחלקת תווים עבור ספרות.
\D מחלקת תווים ללא ספרות.
דמות בריחה.
\E כבה את העיבוד \Q, \L ו\U. לא ב [].
\f הזנת טופס.
\F קיפול עד \E. לא ב [].
\g{}, \g1 הפניה אחורית עם שם, מוחלט או יחסי.
לא ב [].
קביעת \G Pos. לא ב [].
\h מחלקת תווים לרווח לבן אופקי.
\H מחלקת תווים עבור רווח לבן לא אופקי.
\k{}, \k<>, \k'' הפניה חוזרת בשם. לא ב [].
\K שמור את החומר משמאל ל-\K. לא ב [].
\l התו הבא באותיות קטנות. לא ב [].
\L אותיות קטנות עד \E. לא ב [].
\n תו קו חדש (הגיוני).
\N כל תו אבל קו חדש. לא ב [].
\N{} תו או רצף בעל שם או ממוספר (Unicode).
\o{} רצף בריחה אוקטלי.
\p{}, \pP תו עם המאפיין הנתון של Unicode.
תו \P{}, \PP ללא מאפיין Unicode הנתון.
\Q ציטוט (השבת) תווי מטא של דפוס עד \E. לֹא
ב-[].
\r תו החזר.
\R קו חדש גנרי. לא ב [].
\s מחלקת תווים עבור רווח לבן.
\S מחלקת תווים ללא רווחים.
תו Tab.
\u אותיות כותרת התו הבא. לא ב [].
\U אותיות רישיות עד \E. לא ב [].
\v מחלקת תווים עבור רווח לבן אנכי.
\V Class Character עבור רווח לבן לא אנכי.
\w מחלקת תווים עבור תווי מילים.
\W מחלקת תווים עבור תווים שאינם מילים.
\x{}, \x00 רצף בריחה הקסדצימלי.
\X Unicode "אשכול גרפמה מורחב". לא ב [].
\z סוף המחרוזת. לא ב [].
\Z סוף המחרוזת. לא ב [].

אופי בורח
תוקן תווים

לקומץ דמויות יש ייעודי אופי לברוח. הטבלה הבאה מציגה אותם,
יחד עם נקודות קוד ה-ASCII שלהם (בעשרוניות והקסדות), שם ה-ASCII שלהם, הפקד
בריחה על פלטפורמות ASCII ותיאור קצר. (לפלטפורמות EBCDIC, ראה "מפעיל
הבדלים" ב-perlebcdic.)

Seq. נקודת קוד ASCII Cntrl תיאור.
דצמבר הקס
\a 7 07 BEL \cG אזעקה או פעמון
\b 8 08 BS \cH backspace [1]
\e 27 1B ESC \c[ תו בריחה
\f 12 0C FF \cL טופס הזנה
\n הזנת קו 10 0A LF \cJ [2]
\r 13 0D CR \cM החזרת כרכרה
\t 9 09 TAB \cI tab

[1] "\b" הוא תו ה-backspace רק בתוך מחלקת תווים. מחוץ לדמות
class, "\b" לבדו הוא גבול מילה-תו/לא-מילה-תו, ו-"\b{}" הוא חלק
סוג אחר של גבול.

[2] "\n" תואם שורה חדשה לוגית. Perl ממיר בין "\n" למערכת ההפעלה המקורית שלך
תו חדש בעת קריאה או כתיבה לקובצי טקסט.

דוגמה

$str =~ /\t/; # מתאים אם $str מכיל כרטיסייה (אופקית).

שליטה תווים

"\c" משמש לציון תו שליטה; התו שאחרי "\c" קובע את
ערך המבנה. לדוגמה, הערך של "\cA" הוא chr(1), והערך של "\cb"
is chr(2) וכו'. הפרטים העגומים נמצאים ב-"Regexp Quote-Like Operators" בפרלופ. א
רשימה מלאה של מה chr(1) וכו' אמצעים עבור פלטפורמות ASCII ו-EBCDIC נמצא ב-"OPERATOR
הבדלים" ב-perlebcdic.

שים לב ש"\c\" לבדו בסוף ביטוי רגולרי (או מחרוזת במירכאות כפולות) לא
תָקֵף. אחרי הנטוי האחורי חייבת להיות דמות נוספת. כלומר, "\cX" אומר
"chr(28) . 'איקס'" לכל הדמויות X.

כדי לכתוב קוד בלתי תלוי בפלטפורמה, עליך להשתמש ב-"\N{שֵׁם}" במקום זאת, כמו "\N{ESCAPE}" או
"\N{U+001B}", ראה שמות שמות.

מנמוני: cאופי אנטרול.

דוגמה

$str =~ /\cK/; # מתאים אם $str מכיל לשונית אנכית (control-K).

שם or ממוספר תווים ו אופי רצפים

לתווי Unicode יש שם Unicode וערך נקודת קוד מספרי (אורדיאלי). להשתמש ב
מבנה "\N{}" לציון תו לפי אחד מהערכים הללו. רצפים מסוימים של
לדמויות יש גם שמות.

כדי לציין לפי שם, שם התו או רצף התווים עובר בין המתולתל
פלטה.

כדי לציין תו לפי נקודת קוד Unicode, השתמש בטופס "\N{U+קוד נְקוּדָה}", שם קוד
נקודה הוא מספר בהקסדצימלי שנותן את נקודת הקוד ש-Unicode הקצה לה
הדמות הרצויה. נהוג אך לא חובה להשתמש באפסים מובילים כדי לרפד את
מספר עד 4 ספרות. לפיכך, "\N{U+0041}" פירושו "אות רישיות לטינית A", ורק לעתים רחוקות
לראות את זה כתוב בלי שני האפסים המובילים. "\N{U+0041}" פירושו "A" אפילו ב-EBCDIC
מכונות (כאשר הערך הסידורי של "A" אינו 0x41).

אפשר אפילו לתת שמות משלך לדמויות ולרצפי דמויות. ל
פרטים, ראה שמות.

(יש צורה פנימית מורחבת שאתה עשוי לראות בפלט באגים: "\N{U+קוד
קוד.נקודה נְקוּדָה...}". ה-"..." פירושו כל מספר מאלה קוד נקודהמופרדים על ידי נקודות.
זה מייצג את הרצף שנוצר על ידי הדמויות. זוהי צורה פנימית בלבד,
נתון לשינויים, ואתה לא צריך לנסות להשתמש בו בעצמך.)

מנמוני: Nדמות אמד.

שים לב שתו או רצף תווים המבוטאים כתו בעל שם או ממוספר הוא
נחשב לדמות ללא משמעות מיוחדת על ידי מנוע הרקס, ויתאים ל-"as
הוא".

דוגמה

$str =~ /\N{אופי תאילנדי SO SO}/; # מתאים לאופי SO SO התאילנדי

השתמש בשמות 'קיריליים'; # טוען שמות קיריליים.
$str =~ /\N{ZHE}\N{KA}/; # התאם את "ZHE" ואחריו "KA".

אוקטלי בורח

ישנן שתי צורות של בריחה אוקטלית. כל אחד מהם משמש לציון תו לפי הקוד שלו
נקודה שצוינה בסימון אוקטלי.

טופס אחד, זמין החל ב-Perl 5.14 נראה כמו "\o{...}", שבו הנקודות מייצגות
ספרה אוקטלית אחת או יותר. זה יכול לשמש עבור כל תו Unicode.

זה הוצג כדי למנוע את הבעיות הפוטנציאליות עם הטופס האחר, זמין בכל
פרלס. צורה זו מורכבת מקו נטוי ואחריו שלוש ספרות אוקטליות. בעיה אחת
עם הטופס הזה הוא יכול להיראות בדיוק כמו הפניה לאחור בסגנון ישן (ראה
"חוקי ביעור בין בריחה אוקטאלית בסגנון ישן והפניות לאחור" למטה.) אתה יכול
הימנע מכך על ידי הפיכת הספרה הראשונה מבין שלושת הספרות תמיד לאפס, אבל זה הופך את \077 ל
נקודת הקוד הגדולה ביותר שניתן לציין.

בהקשרים מסוימים, נטוי אחורי ואחריו שתי או אפילו ספרה אוקטלית אחת עשוי להתפרש
כבריחה אוקטלית, לפעמים עם אזהרה, ובגלל כמה באגים, לפעמים עם
תוצאות מפתיעות. כמו כן, אם אתה יוצר ביטוי רגיל מתוך קטעים קטנים יותר
משורשרים יחד, ואתה משתמש בפחות משלוש ספרות, תחילתו של קטע אחד
עשוי להתפרש כהוספת ספרות לסוף הקטע שלפניו. ראה "אבסולוט
הפניה" לדיון נוסף ודוגמאות לבעיית הקטע.

שימו לב שדמות המתבטאת כבריחה אוקטלית נחשבת לדמות בלי
משמעות מיוחדת על ידי מנוע הרקס, ותתאים "כפי שהוא".

לסיכום, הטופס "\o{}" הוא תמיד בטוח לשימוש, והטופס השני בטוח לשימוש עבור
קוד מצביע דרך \077 כאשר אתה משתמש בדיוק בשלוש ספרות כדי לציין אותן.

מנמוני: 0ctal או octal.

דוגמאות (בהנחה של פלטפורמת ASCII)

$str = "פרל";
$str =~ /\o{120}/; # התאמה, "\120" הוא "P".
$str =~ /\120/; # אותו.
$str =~ /\o{120}+/; # התאמה, "\120" הוא "P",
# זה חוזר על עצמו לפחות פעם אחת.
$str =~ /\120+/; # אותו.
$str =~ /P\053/; # אין התאמה, "\053" הוא "+" ונלקח פשוטו כמשמעו.
/\o{23073}/ # חזית שחורה, רקע לבן פנים מחייכות.
/\o{4801234567}/ # מעלה אזהרה ומניב chr(4).

חלוקה כללית בין בריחה אוקטלית בסגנון ישן והפניות לאחור

בריחה אוקטאלית של הטופס "\000" מחוץ למחלקות תווים בסוגריים עשויות להתנגש
עם הפניות אחוריות בסגנון ישן (ראה "הפניה מוחלטת" להלן). שניהם מורכבים מא
נטוי אחורי ואחריו מספרים. אז פרל צריך להשתמש בהיוריסטיקה כדי לקבוע אם זה א
הפניה לאחור או בריחה אוקטלית. Perl משתמשת בכללים הבאים כדי לבלבל:

1. אם הקו האחורי מלווה בספרה בודדת, זוהי הפניה לאחור.

2. אם הספרה הראשונה שאחרי האלכסון האחורי היא 0, זו בריחה אוקטלית.

3. אם המספר העוקב לאחור הוא N (בעשרוני), ופרל כבר ראתה את N
קבוצות לכידה, פרל רואה בכך הפניה לאחור. אחרת, הוא מחשיב את זה כ-
בריחה אוקטלית. אם ל-N יש יותר משלוש ספרות, Perl לוקח רק את שלושת הראשונות עבור ה-
בריחה אוקטלית; השאר מותאמים כפי שהם.

my $pat = "(" x 999;
$pat .= "a";
$pat .= ")" x 999;
/^($pat)\1000$/; # מתאים ל-'aa'; יש 1000 קבוצות לכידה.
/^$pat\1000$/; # תואם את 'a@0'; יש 999 קבוצות לכידה
# ו-\1000 נתפסים כ-\100 ('@') ו-'0'.

אתה יכול לאלץ פרשנות הפניה לאחור תמיד על ידי שימוש בטופס "\g{...}". אתה יכול
לכפות פירוש אוקטלי תמיד באמצעות הצורה "\o{...}", או עבור מספרים למעלה
עד \077 (= 63 עשרוני), באמצעות שלוש ספרות, המתחילות ב-"0".

הקסאדצימלי בורח

כמו בריחה אוקטלית, יש שתי צורות של בריחה הקסדצימלית, אבל שתיהן מתחילות עם
רצף "\x". אחרי זה מופיעות שתי ספרות הקסדצימליות בדיוק היוצרות א
מספר, או מספר הקסדצימלי באורך שרירותי מוקף בסוגרים מסולסלים. ה
מספר הקסדצימלי הוא נקודת הקוד של התו שברצונך לבטא.

שימו לב שדמות המתבטאת כאחת מהבריחות הללו נחשבת לדמות בלי
משמעות מיוחדת על ידי מנוע הרקס, ותתאים "כפי שהוא".

מנמוני: הואxאדצימלי.

דוגמאות (בהנחה של פלטפורמת ASCII)

$str = "פרל";
$str =~ /\x50/; # התאמה, "\x50" הוא "P".
$str =~ /\x50+/; # התאמה, "\x50" הוא "P", זה חוזר על עצמו לפחות פעם אחת
$str =~ /P\x2B/; # אין התאמה, "\x2B" הוא "+" ונלקח פשוטו כמשמעו.

/\x{2603}\x{2602}/ # איש שלג עם מטריה.
# דמות Unicode 2603 היא איש שלג,
# תו Unicode 2602 הוא מטריה.
/\x{263B}/ # פנים מחייכות שחורות.
/\x{263b}/ # אותו דבר, ספרות ה-hex A - F אינן תלויות רישיות.

משנים
מספר רצפי נטוי לאחור קשורים לשינוי התו, או התווים
בעקבותיהם. "\l" יגרום לאותיות קטנות של התו שאחריו, בעוד "\u" יופיע באותיות רישיות
(או, ליתר דיוק, כותרת) הדמות שאחריה. הם מספקים פונקציונליות
בדומה לפונקציות "lcfirst" ו-"ucfirst".

כדי להשתמש באותיות גדולות או קטנות של מספר תווים, ייתכן שתרצה להשתמש ב-"\L" או "\U", אשר
יופיעו באותיות קטנות/גדולות בכל התווים הבאים אחריהם, עד לסוף ה-
דפוס או המופע הבא של "\E", המוקדם מביניהם. הם מספקים פונקציונליות
בדומה למה שהפונקציות "lc" ו-"uc" מספקות.

"\Q" משמש לציטוט (להשבית) תווי מטא של דפוס, עד ל-"\E" הבא או לסוף של
הדפוס. "\Q" מוסיף לוכסן אחורי לכל תו שיכולה להיות לו משמעות מיוחדת
פרל. בטווח ASCII, הוא מצטט כל תו שאינו אות, ספרה או
מדגיש. ראה "quotemeta" ב-perlfunc לפרטים על מה שצוטט עבור לא-ASCII
נקודות קוד. שימוש זה מבטיח שכל תו בין "\Q" ו-"\E" יהיה מותאם
פשוטו כמשמעו, לא מתפרש כתו מטא על ידי מנוע הרקס.

ניתן להשתמש ב-"\F" כדי לקפל את כל התווים הבאים, עד ל-"\E" הבא או לסוף
הדפוס. הוא מספק את הפונקציונליות הדומה לפונקציית "fc".

מנמוני: Lאות קטנה, Uאות, Fמקרה ישן, Quotemeta, End.

דוגמאות

$sid = "sid";
$greg = "GrEg";
$miranda = "(מירנדה)";
$str =~ /\u$sid/; # מתאים ל'סיד'
$str =~ /\L$greg/; # מתאים ל'גרג'
$str =~ /\Q$miranda\E/; # מתאים ל'(מירנדה)', כאילו התבנית
# נכתב בתור /\(מירנדה\)/

אופי כיתות
לביטויים רגולריים של Perl יש מגוון גדול של מחלקות תווים. חלק מהדמות
המחלקות נכתבות כרצף נטוי אחורי. נדון בקצרה באלו כאן; מלא
ניתן למצוא פרטים על שיעורי אופי ב-perlrecharclass.

"\w" הוא מחלקת תווים שמתאימה לכל יחיד מילה תו (אותיות, ספרות, Unicode
סימנים, וסימני פיסוק מחברים (כמו הקו התחתון)). "\d" היא מחלקת תווים ש
תואם לכל ספרה עשרונית, בעוד שמחלקת התווים "\s" תואמת לכל רווח לבן
אופי. חדשות ב-perl 5.10.0 הן המחלקות "\h" ו-"\v" שמתאימות לאופקי ול
תווי רווח אנכי.

קבוצת התווים המדויקת המותאמות ל-"\d", "\s" ו-"\w" משתנה בהתאם למגוון
פרגמה וביטויים רגולריים. אפשר להגביל את ההתאמה ל-
טווח ASCII על ידי שימוש במשנה הביטוי הרגולרי "/a". ראה perlrecharclass.

גרסאות האותיות הגדולות ("\W", "\D", "\S", "\H" ו-"\V") הן מחלקות תווים
להתאים, בהתאמה, כל תו שאינו תו מילה, ספרה, רווח לבן,
רווח לבן אופקי, או רווח לבן אנכי.

זִכרוֹנִיוּת: word, dלהפעיל, sלִפְסוֹעַ, hמזרחי, vארטיקלי.

Unicode כיתות

"\pP" (כאשר "P" הוא אות בודדת) ו-"\p{Property}" משמשים כדי להתאים תו
תואם למאפיין Unicode הנתון; מאפיינים כוללים דברים כמו "אות" או "תאילנדית".
תו". שימוש באותיות רישיות של הרצף ל-"\PP" ו-"\P{Property}" גורם לרצף להתאים
תו שאינו תואם למאפיין Unicode הנתון. לפרטים נוספים, ראה
"רצפי נטוי אחורי" ב-perlrecharclass ו-"מאפייני אופי Unicode" ב
perlunicode.

מנמוני: pנכס.

הפניה
אם משתמשים בסוגריים לכידת בביטוי רגולרי, נוכל להתייחס לחלק של
מחרוזת מקור שהתאימה, ומתאימה בדיוק לאותו דבר. יש שלוש דרכים של
מתייחס לכאלה הפניה אחורית: בהחלט, יחסית, ולפי השם.

מוּחלָט התייחסות

או "\gN" (החל ב-Perl 5.10.0), או "N" (בסגנון ישן) איפה N הוא חיובי
מספר עשרוני (ללא סימן) בכל אורך הוא התייחסות מוחלטת לקבוצת לכידה.

N מתייחס לקבוצת הסוגריים ה-N, אז "\gN" מתייחס לכל מה שהתאים לו
קבוצת הסוגריים הזו. לפיכך "\g1" מתייחס לקבוצת הלכידה הראשונה ב-Regex.

ה-"\gN" ניתן לכתוב בצורה שווה כ"\g{N}" מה שמונע אי בהירות בעת הבנייה
רקס על ידי שרשור מיתרים קצרים יותר. אחרת, אם היה לך ביטוי רגולרי "qr/$a$b/", ו-$a
הכיל את "\g1", ו-$b הכיל את "37", תקבל "/\g137/" וזה כנראה לא מה
התכוונת.

בתוך ה "N" טופס, N אסור להתחיל ב-"0", וחייב להיות לפחות N לכידת
קבוצות, או אחרת N נחשב לבריחה אוקטלית (אבל משהו כמו "\18" זהה ל
"\0018"; כלומר, הבריחה האוקטלית "\001" ואחריה ספרה מילולית "8").

מנמוני: gקבוצה.

דוגמאות

/(\w+) \g1/; # מוצא מילה משוכפלת, (למשל "חתול חתול").
/(\w+) \1/; # אותו דבר; כתוב בסגנון ישן.
/(.)(.)\g2\g1/; # התאם פלינדרום של ארבע אותיות (למשל "ABBA").

קרוב משפחה התייחסות

"\g-N" (החל ב-Perl 5.10.0) משמש להתייחסות יחסית. (אפשר לכתוב את זה בתור
"\g{-N".) זה מתייחס ל Nהקבוצה לפני "\g{-N}".

היתרון הגדול של הטופס הזה הוא שהוא מקל בהרבה על כתיבת דפוסים
הפניות שניתן לבצע אינטרפולציה בדפוסים גדולים יותר, גם אם גם הדפוס הגדול יותר
מכיל קבוצות לכידה.

דוגמאות

/(א) # קבוצה 1
(# קבוצה 2
(ב) # קבוצה 3
\g{-1} # מתייחס לקבוצה 3 (ב)
\g{-3} # מתייחס לקבוצה 1 (A)
)
/איקס; # מתאים ל"ABBA".

my $qr = qr /(.)(.)\g{-2}\g{-1}/; # מתאים ל-'abab', 'cdcd' וכו'.
/$qr$qr/ # מתאים ל-'ababcdcd'.

שם התייחסות

"\g{שֵׁם}" (החל ב-Perl 5.10.0) ניתן להשתמש כדי להתייחס בחזרה לקבוצת לכידה בעלת שם,
מוותר לחלוטין על הצורך לחשוב על עמדות חיץ לכידה.

כדי להיות תואם לביטויים רגולריים של .Net, "\g{name}" עשוי להיכתב גם כ
"\k{name}", "\k " או "\k'name'".

כדי למנוע אי בהירות, שם אסור להתחיל בספרה או להכיל מקף.

דוגמאות

/(? \w+) \g{word}/ # מוצא מילה משוכפלת, (למשל "חתול חתול")
/(? \w+) \k{word}/ # אותו הדבר.
/(? \w+) \k / # אותו.
/(? .)(? .)\g{letter1}\g{letter2}/
# התאם פלינדרום של ארבע אותיות (למשל "ABBA")

קביעות
קביעות הן תנאים שחייבים להיות נכונים; הם למעשה לא תואמים חלקים של
מחרוזת משנה. ישנן שש קביעות שנכתבות כרצפי נטוי אחורי.

\A "\A" תואם רק בתחילת המחרוזת. אם לא נעשה שימוש במשנה "/m",
אז "/\A/" שווה ערך ל-"/^/". עם זאת, אם נעשה שימוש במשנה "/m", אז "/^/"
תואם שורות חדשות פנימיות, אבל המשמעות של "/\A/" לא משתנה על ידי ה-"/m"
מַתקֵן. "\A" תואם בתחילת המחרוזת ללא קשר אם ה-"/m"
נעשה שימוש במשנה.

\z, \Z
"\z" ו-"\Z" תואמים בסוף המחרוזת. אם לא נעשה שימוש במשנה "/m", אז
"/\Z/" שווה ערך ל-"/$/"; כלומר, זה תואם בסוף המחרוזת, או אחד
לפני השורה החדשה בסוף המחרוזת. אם נעשה שימוש במשנה "/m", אז "/$/"
התאמות בשורות חדשות פנימיות, אבל המשמעות של "/\Z/" לא משתנה על ידי ה-"/m"
מַתקֵן. "\Z" תואם בסוף המחרוזת (או ממש לפני שורה חדשה נגררת)
ללא קשר אם נעשה שימוש במשנה "/m".

"\z" הוא בדיוק כמו "\Z", פרט לכך שהוא אינו תואם לפני שורה חדשה נגררת. "\z"
התאמה בסוף המחרוזת בלבד, ללא קשר למתאמים המשמשים, ולא רק
לפני קו חדש. זה איך לעגן את הגפרור לקצה האמיתי של המיתר מתחת
כל התנאים.

\G "\G" משמש בדרך כלל רק בשילוב עם המשנה "/g". אם המשנה "/g".
משמש וההתאמה מתבצעת בהקשר סקלארי, פרל זוכר היכן במקור
מחרוזת את המשחק האחרון שהסתיימה, ובפעם הבאה, זה יתחיל את המשחק מהמקום שבו הוא
הסתיים בפעם הקודמת.

"\G" מתאים לנקודה שבה הסתיימה ההתאמה הקודמת במחרוזת זו, או להתחלה
של המחרוזת הזו אם לא הייתה התאמה קודמת.

מנמוני: Gלובלי.

\b{}, \b, \B{}, \B
"\b{...}", זמין החל מגרסה 5.22, תואם גבול (בין שני תווים, או
לפני התו הראשון של המחרוזת, או אחרי התו האחרון של המחרוזת)
מבוסס על כללי Unicode עבור סוג הגבול שצוין בתוך הסוגרים. ה
סוגי גבולות הידועים כיום ניתנים להלן כמה פסקאות. "\B{...}" תואם ב-
כל מקום בין תווים שבו "\b{...}" מאותו סוג אינו תואם.

"\b" כאשר לא מיד אחריו "{" תואם בכל מקום בין מילה
(משהו מותאם על ידי "\w") ותו שאינו מילה ("\W"); "\B" כאשר לא מיד
ואחריו "{" מתאים בכל מקום בין תווים שבהם "\b" אינו תואם.
כדי לקבל התאמה טובה יותר של מילים של טקסט בשפה טבעית, ראה \b{wb} להלן.

"\b" ו-"\B" מניחים שיש תו שאינו מילה לפני ההתחלה ואחרי ה
סוף מחרוזת המקור; אז "\b" יתאים בתחילת (או בסוף) של המקור
מחרוזת אם מחרוזת המקור מתחילה (או מסתיימת) עם תו מילה. אחרת, "\B"
יתאים.

אל תשתמש במשהו כמו "\b=head\d\b" ותצפה שהוא יתאים להתחלה של a
קַו. זה לא יכול, כי בשביל שיהיה גבול לפני הלא-מילה "=", שם
חייב להיות תו מילה מיד קודם. כל גבול "\b" ו-"\B" פשוט
קביעות מחפשות תווי מילים בלבד, לא תווים שאינם מילים ולא עבור
מסתיים מחרוזת. זה עשוי לעזור להבין כיצד <\b> ו-<\B> פועלים על ידי השוואה ביניהם
התעופה

\b באמת אומר (?:(?<=\w)(?!\w)|(?
\B באמת אומר (?:(?<=\w)(?=\w)|(?

לעומת זאת, "\b{...}" ו-"\B{...}" עשויים להתאים או לא מתאימים בתחילת ובסוף של
הקו, בהתאם לסוג הגבול. אלה מיישמים את ברירת המחדל של Unicode
גבולות, המפורטים בhttp://www.unicode.org/reports/tr29/>. סוגי הגבול
הזמינים כרגע הם:

"\b{gcb}" או "\b{g}"
זה תואם ל-Unicode "גבול אשכול גרפים". (למעשה פרל תמיד משתמש
אשכול הגרפמה המשופר "מורחב"). אלה מוסברים להלן למטה
""\איקס"". למעשה, "\X" היא דרך נוספת לקבל את אותה פונקציונליות. זה
שווה ערך ל "/.+?\b{gcb}/". השתמש במה שהכי נוח לך
מצב.

"\b{sb}"
זה תואם ל-Unicode "גבול משפט". זהו כלי עזר לניתוח טבעי
משפטי שפה. זה נותן תוצאות טובות, אבל לא מושלמות. למשל, זה חושב
ש"מר סמית" הוא שני משפטים. פרטים נוספים נמצאים ב
<http://www.unicode.org/reports/tr29/>. שימו לב גם שהוא חושב שהכל
התאמת "\R" (למעט הזנת טופס וטאב אנכי) היא גבול משפטים.
"\b{sb}" עובד עם טקסט המיועד למעבדי תמלילים שעוטפים שורות
אוטומטית לתצוגה, אך גבולות קווים מקודדים נחשבים
בעצם הקצוות של בלוקים של טקסט (באמת פסקאות), ומכאן הקצוות של
משפטים. "\b{sb}" אינו מיטיב עם טקסט המכיל שורות חדשות מוטבעות, כמו
טקסט המקור של המסמך שאתה קורא. טקסט כזה צריך להיות
מעובד מראש כדי להיפטר ממפרידי השורות לפני שמחפשים משפט
גבולות. יש אנשים שרואים בזה באג בתקן Unicode, וזה
ההתנהגות די נתונה לשינוי בגרסאות Perl עתידיות.

"\b{wb}"
זה תואם "גבול מילים" של Unicode. זה נותן טוב יותר (אם כי לא מושלם)
תוצאות לעיבוד שפה טבעית מאשר "\b" רגיל (ללא סוגרים).
לדוגמה, הוא מבין שאגרות יכול להיות באמצע מילים ו
שסוגריים אינם (ראה את הדוגמאות למטה). פרטים נוספים נמצאים ב
<http://www.unicode.org/reports/tr29/>.

חשוב להבין כאשר אתה משתמש בגבולות Unicode אלה, שאתה לוקח
סיכון שגרסה עתידית של Perl מכילה גרסה מאוחרת יותר של Unicode
Standard לא יעבוד בדיוק כמו שהוא פעל כאשר הקוד שלך נכתב.
כללים אלה אינם נחשבים יציבים והיו נתונים מעט יותר לשינויים
מאשר שאר התקן. Unicode שומרת לעצמה את הזכות לשנות אותם כרצונו, וכן
פרל שומרת לעצמה את הזכות לעדכן את יישומו לכללים החדשים של Unicode. בתוך ה
בעבר, כמה שינויים נבעו בגלל שתווים חדשים נוספו ל-Standard
שיש להם מאפיינים שונים מכל הדמויות הקודמות, אז חוקים חדשים הם
גובש לטיפול בהם. אלה לא אמורים לגרום לתאימות לאחור
נושאים. אבל כמה שינויים שינו את הטיפול בדמויות קיימות בגלל
הוועדה הטכנית של יוניקוד החליטה שהשינוי מוצדק לכל דבר
סיבה. זה יכול להיות כדי לתקן באג, או בגלל שהם חושבים שמתקבלות תוצאות טובות יותר
עם הכלל החדש.

חשוב גם להבין שאלו הן הגדרות גבול ברירת מחדל, וזה
ייתכן שיישומים ירצו להתאים את התוצאות למטרות ולמקומות מסוימים.

Unicode מגדיר סוג גבול רביעי, הנגיש דרך Unicode::LineBreak
מודול.

מנמוני: bעגול.

דוגמאות

"חתול" =~ /\Acat/; # התאמה.
"חתול" =~ /חתול\Z/; # התאמה.
"חתול\n" =~ /חתול\Z/; # התאמה.
"חתול\n" =~ /חתול\z/; # אין התאמה.

"חתול" =~ /\bcat\b/; # התאמות.
"חתולים" =~ /\bcat\b/; # אין התאמה.
"חתול" =~ /\bcat\B/; # אין התאמה.
"חתולים" =~ /\bcat\B/; # התאמה.

while ("כלב חתול" =~ /(\w+)/g) {
להדפיס $1; # מדפיס 'כלב חתול'
}
while ("כלב חתול" =~ /\G(\w+)/g) {
להדפיס $1; # מדפיס 'חתול'
}

my $s = "הוא אמר," האם pi 3.14? (אני לא בטוח).\"";
print join("|", $s =~ m/ ( .+? \b) /xg), "\n";
print join("|", $s =~ m/ ( .+? \b{wb} ) /xg), "\n";
הדפסים
הוא| |אמר|, "|Is| |pi| |3|.|14|? (|I|'|m| |לא| |בטח
הוא| |אמר|,| |"|Is| |pi| |3.14|?| |(|אני| |לא| |בטוח|)|.|"

שונה
כאן אנו מתעדים את רצפי הנטוי האחורי שאינם נופלים באחת מהקטגוריות שלמעלה.
אלו הם:

\C (הוצא משימוש.) "\C" תמיד תואם לאוקטטה בודדת, גם אם מחרוזת המקור מקודדת
בפורמט UTF-8, והתו שיש להתאים הוא תו מרובה אוקטטים. זה
מסוכן מאוד, כי זה מפר את הפשטת הדמות ההגיונית ויכול לגרום
רצפי UTF-8 יהפכו לפגומים.

השתמש ב-"utf8::encode()" במקום זאת.

מנמוני: oCטט.

\K זה הופיע ב-perl 5.10.0. כל מה שמתאים משמאל ל-"\K" אינו כלול ב-$&, ו
לא יוחלף אם התבנית משמשת להחלפה. זה מאפשר לך לכתוב
"s/PAT1 \K PAT2/REPL/x" במקום "s/(PAT1) PAT2/${1}REPL/x" או "s/(?<=PAT1)
PAT2/REPL/x".

מנמוני: Kאייפ.

\N תכונה זו, הזמינה החל מגרסה 5.12, מתאימה לכל תו שהוא לֹא a
שורה חדשה. זוהי קיצור של כתיבת "[^\n]", וזהה ל-"."
metasymbol, למעט תחת הדגל "/s", שמשנה את המשמעות של ".", אבל לא
"\N".

שים לב ש"\N{...}" יכול להיות תו בעל שם או ממוספר .

Mnemonic: השלמה של \n.

\R "\R" תואם את א גנרית שורה חדשה; כלומר, כל דבר שנחשב לרצף שבירת שורות לפי
Unicode. זה כולל את כל התווים המותאמים על ידי "\v" (רווח לבן אנכי), וה-
רצף רב תווים "\x0D\x0A" (החזרת כרכרה ואחריו הזנת שורה,
נקראת לפעמים ה-newline של הרשת; זה רצף סוף השורות המשמש ב-Microsoft
קבצי טקסט שנפתחו במצב בינארי). "\R" שווה ערך ל-"(?>\x0D\x0A|\v)". (ה
הסיבה שהוא לא חוזר לאחור היא שהרצף נחשב לבלתי נפרד. זֶה
אומר ש

"\x0D\x0A" =~ /^\R\x0A$/ # אין התאמה

נכשל, מכיוון שה-"\R" תואם את המחרוזת כולה, ולא יחזור אחורה כדי להתאים רק
ה"\x0D".) מכיוון ש"\R" יכול להתאים לרצף של יותר מתו אחד, זה לא יכול להיות
לשים בתוך מחלקת תווים בסוגריים; "/[\R]/" היא שגיאה; השתמש ב-"\v" במקום זאת. "\R"
הוצג ב-perl 5.10.0.

שים לב שזה לא מכבד שום מיקום שעשוי להיות בתוקף; זה מתאים
על פי מערכת התווים המקורית של הפלטפורמה.

מנמוני: אין באמת. "\R" נבחר כי PCRE כבר משתמש ב-"\R", ועוד
חשוב כי Unicode ממליצה על מטא-תו של ביטוי רגיל כזה, ו
מציע "\R" בתור הסימון שלו.

\X זה תואם ל-Unicode מוּרחָב גרפמה אשכול.

"\X" תואם היטב את מה ששימוש רגיל (שלא מתכנת Unicode) ישקול א
דמות בודדת. כדוגמה, שקול G עם איזשהו סימן דיאקטי, כזה
בתור חץ. אין תו בודד כזה ב-Unicode, אבל אפשר להרכיב אותו על ידי
באמצעות G ואחריו Unicode "COMBINING UPWARDS ARROW BELOW", ויהיה
מוצג על ידי תוכנה מודעת Unicode כאילו היה תו בודד.

השידוך חמדני ואינו נסוג, כך שהאשכול לעולם לא יתפרק לתוכו
רכיבים קטנים יותר.

ראה גם "\b{gcb}".

מנמוני: הXתו Unicode נוטה.

דוגמאות

$str =~ s/foo\Kbar/baz/g; # שנה כל 'בר' בעקבות 'foo' ל-'baz'
$str =~ s/(.)\K\g1//g; # מחק תווים משוכפלים.

"\n" =~ /^\R$/; # התאמה, \n היא שורה חדשה גנרית.
"\r" =~ /^\R$/; # התאמה, \r הוא קו חדש גנרי.
"\r\n" =~ /^\R$/; # התאמה, \r\n היא שורה חדשה גנרית.

"P\x{307}" =~ /^\X$/ # \X תואם P עם נקודה למעלה.

השתמש ב-perlrebackslash באינטרנט באמצעות שירותי onworks.net



התוכניות המקוונות האחרונות של לינוקס ו-Windows