Regex - ביטויים רגולריים - הקדמה

הקדמה לסדרת Regex - ביטויים רגולריים

Authors
  • Name
    Dovid
    Published on
    Twitter

ביטויים רגולריים, הקדמה

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

במגוון גדול מאוד של תוכנות וכלי תוכנה, יש מקום לregex או לתת וריאציה שלה (כמו מקרים מצומצמים של תמיכה בגוקר *, ? שיש בשורת הפקודה בwindows או בוורד שיש סט רחב יותר תחת השם תווים כלליים, מי שמכיר את אינדיזיין פגש שם את גרפ (שהשם הוא לקוח מכלי נפוץ במערכות לינוקס לעבודה עם רג'קס), ניתן אפילו להצביע על תוכנות כמו פרויקט השו"ת של בר אילן ובני משפחתו שבעצם תומכים בחיפוש בשפה שהם יצרו לעצמם אבל היא בעצם עושה את אותו רעיון שזה תיאור של טקסט רצוי בצורה די מתמטית).

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

מי שמכיר את שפת JS, שמה ממש קל לבדוק ולשחק עם regex שקיבל מקום מכובד בשפה, ואגב הפעולה שלו בשפה זו מהירה במיוחד (יותר מדוטנט למשל).

יש הרבה כלים לבדקה ונסיון של regex, חלקם אונליין, אני למשל משתמש על פי רוב באתר הזה: https://regex101.com. בתיבת הטקסט העליונה כותבים את המחרוזת לחיפוש, ובחלק שתחתיה כותבים טקסט כל שהוא שעליו יתבצע החיפוש. בצד יש הסבר שלאט לאט יובן, שמנתח את הטקסט שהוזן בחיפוש. העברית לא הכי נתמכת טוב, עדף לצרכי טסטים לכתוב נטו באנגלית (ולעברת רק בסוף ב"הלכה למעשה"). אתר נוסף שלחלק מהאנשים עשוי להיות ידידותי יותר הוא http://regexstorm.net/tester, עוד אתר הוא https://www.regexpal.com, יש כמובן עוד עם הבדלי טעם וריח.

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

var text = `יש הרבה כלים לבדקה ונסיון של regex, חלקם אונליין, אני למשל משתמש על פי רוב באתר הזה: https://regex101.com/. בתיבת הטקסט העליונה כותבים את המחרוזת לחיפוש, ובחלק שתחתיה כותבים טקסט כל שהוא שעליו יתבצע החיפוש. בצד יש הסבר שלאט לאט יובן, שמנתח את הטקסט שהוזן בחיפוש. העברית לא הכי נתמכת טוב, עדף לצרכי טסטים לכתוב נטו באנגלית (ולעברת רק בסוף ב"הלכה למעשה"). כמו"כ אפשר לבדוק בשפת JS, שיש ל סביבת עבודה בכל דפדפן בקונסול. תפתחו את הקונסול של הדפדפן (F12 בכרום), שם כתבו קודם כל מחרוזת טקסט ארוכה בתוך משתנה, למשל:`;

הקישו אנטר אחרי הפקודה. כעת תוכלו לחפש ולהחליף בטקסט הזה ע"י regex, למשל (כל שורה היא דוגמה עצמאית):

/א/.exec(text);
/א/.test(text);
text.replace(/א/ , 'A');
text.split(/א/);

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

אגב, מי שלא מבין כלום בשורות האלה זה אומר שהוא לא מכיר את regex ו/או את JS ואין בכך שום עיכוב לגבי הבנת הנושא הנוכחי. הבאתי את כל זה כדוגמה למקום בו ניתן לשחק עם הביטויים.

כמו"כ יש תוכנות שהחיפוש וההחלפה בהם תומכים בregex ממש אורגינל כמו למשל notepad++, או visual studio code ובעצם כל עורך קוד/טקסט מתקדם וק"ו IDE, מי שרוצה יכול לשחק שמה לשם לימוד השפה.

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

בפוסט הבא הקדמה מעשית + פרק ראשון.