לרוב המתכנתים יש נקודת עיוורות. הם ישמחו לדבג מערכת מבוזרת או להיאבק בפריימוורק חדש, אך הם יבזבזו עשרים דקות על עריכת טקסט ידנית שאמורה לקחת עשר שניות. הסיבה היא תמיד אותה סיבה: ביטויים רגולריים (regex) נראים כמו רעש תקשורתי. תבנית טיפוסית היא חומת לוכסנים, לוכסנים הפוכים וסימני פיסוק שנראים כאילו נשלחו ממודם משנות ה-90. הכאוס הוויזואלי הזה מרתיע אנשים מוכשרים מכישור בעל ערך אמיתי.
החדשות הטובות הן ש-regex אינו קשה. הוא דחוס. הסמלים אורזים כמות עצומה של משמעות בשטח קטן, כך שהעין שלכם קוראת שם אקראיות במקום תיאור מדויק מאוד. ברגע שיש לכם את המודל המנטלי הנכון, אתם מפסיקים לנסות לפענח את הסמלים אחד אחד ובמקום זאת קוראים את הצורה שהם מתארים. כשאתם עושים זאת, הרעש נעלם לחלוטין.
תבנית, לא תוכנית
השינוי היסודי הוא להבין מהו ביטוי רגולרי באמת. רוב הקוד שאתם כותבים הוא פרוצדורלי: עשה זאת, אז עשה זאת, בדוק את התנאי הזה, לולאה שוב. regex אינו פרוצדורה. הוא תבנית סטטית המתארת איך הטקסט אמור להיראות. אתם לא כותבים הוראות לאיך לחפש; אתם מגישים למנוע ההתאמה שרטוט ומניחים לו לעשות את העבודה.
חשבו על זה כעל תיאור צורות בשפה פשוטה:
- מספר בן חמש ספרות.
- כתובת אימייל.
- שורה שמתחילה באות גדולה.
זה כל מה ש-regex עושה, פרט לכך שהוא משתמש באלף-בית דחוס. כשאתם רואים \d{5}, אתם לא רואים קסם. אתם רואים "ספרה, חמש פעמים". כשאתם רואים ^[A-Z], אתם רואים "תחילת שורה, ואחריה אות גדולה אחת". המיומנות אינה שינון. היא למידה של מבט חטוף על התבנית ותרגומה בחזרה לתיאור הפשוט הזה. ברגע שתוכלו לבצע את התרגום הזה, גורם ההרתעה ייעלם.
לאן הזמן באמת הולך
אנשים נוטים ללמוד regex רק אחרי שהם סבלו מספיק. גישה טובה יותר היא לזהות את המשימות שזקוקות לתבנית לפני שאתם מבזבזים על עצמן אחר צהריים שלם.
אם אתם צריכים למצוא כל תאריך במסמך בן מאתיים עמודים, regex יאתר אותם במעבר אחד. אם אתם צריכים לאמת אם משתמש הקליד URL אמיתי לפני שהאפליקציה שלכם מקבלת אותו, תבנית יכולה לאכוף את הצורה הבסיסית של הכתובת. אם אתם מנקים טקסט שהועתק מאתר אינטרנט וצריכים לצמצם מספר רווחים לרווח יחיד, regex להחלפה דורש ארבעה תווים בלבד. אם אתם מחלצים נתונים מיומני שרת (server logs) מבולגנים, regex הוא לעיתים קרובות הגשר הסביר היחיד בין טקסט לא מובנה לבין דוח מובנה.
הנה כלל פשוט לאימוץ: אם אתם עומדים לבצע עריכת טקסט חמישים פעמים באופן ידני, עצרו. כתבו תבנית במקום זאת. חזרתיות ידנית היא לא רק איטית; היא לא אמינה. אתם עלולים לפספס את המקרה ה-47 או להכניס טעות הקלדה במקרה ה-33. תבנית מבצעת את העבודה פעם אחת, בצורה נכונה, והיא מתעדת את הכלל שיישמתם מלכתחילה.
לולאת למידה שעובדת
אל תנסו להקליד תבניות מושלמות מהזיכרון. כך נבנה התסכול. במקום זאת, עקבו אחר לולאה הדוקה ששומרת עליכם מתקדמים מבלי ללכת לאיבוד בתחביר.
- תארו את הצורה במילים. לפני שאתם נוגעים בתו מיוחד, כתבו בדיוק מה אתם רוצים. "ארבע ספרות, ואחריהן מקף, ואחריו שתי ספרות, ואחריו מקף, ואחריו שתי ספרות." אם אתם לא יכולים לומר זאת בבירור, אתם לא יכולים ליצור עבור זה תבנית.
- צרו טיוטה ראשונה. הפכו את התיאור שלכם לתבנית בסיסית באמצעות הסמלים הרחבים ביותר הסבירים. אל תדאגו לשלמות. אתם בונים אב-טיפוס,
