ביטויים רגולריים – קבוצות תווים

ביטויים רגולריים – קבוצות תווים

  • פרסומת

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

Screen Shot 2015-05-25 at 10.37.01 PM

הריבועים הכחולים מייצגים ״התאמה״ (match), שימוש בביטוי הרגולרי cks על גבי הטקסט שבדוגמה יחזיר שתי תוצאות.

הנקודה . היא תו מיוחד בשפת הביטויים הרגולריים. הנקודה מייצגת כל תו חוץ משורה חדשה \n . לדוגמה, הביטוי הרגולרי e. על גבי הטקסט I love RegEx יחזיר שתי תוצאות – e ו- eg:

Screen Shot 2015-05-26 at 11.35.16 AM

קבוצות תווים

עד כה ראינו איך ניתן למצוא תווים ביחס של ״אחד לאחד״, כלומר, התווים שבביטוי הותאמו לתווים שבטקסט המוזן באופן שלא מתיר מקום לווריאציות. חיפוש ״מדויק״ כזה הוא לא תמיד שימושי. מה אם נרצה לחפש מילה מסויימת שיכולה להופיע במספר צורות, כמו disk ו- disc? לשם כך קיים כלי מיוחד בשפת הביטויים הרגולריים הנקרא קבוצות תווים (character classes). בעזרת קבוצות תווים ניתן להגדיר טווחים של תווים ובכך להגדיל את יעד החיפוש.

סוגריים מרובעים [] מגדירים קבוצת תווים. כל תו בתוך הסוגריים מייצג תו אפשרי בטקסט היעד. לדוגמה, הקבוצה [ero] תחפש את אחד משלושת התווים e, r או o. לדוגמה, הביטוי הרגולרי b[ero]at על גבי הטקסט "beat a brat on a boat" יחזיר 3 תוצאות: beat, brat ו- boat:

Screen Shot 2015-05-27 at 3.01.25 PM

ניתן גם לשלול תווים על ידי שימוש בתו ^ בתוך קבוצת התווים. קבוצת תווים שלילית מחפשת כל תו חוץ מהתווים הנמצאים בתוך הקבוצה. לדוגמה, הקבוצה [^er] מחפשת כל תו חוץ מ- e ו- r:

Screen Shot 2015-05-27 at 4.49.16 PM

טווחים ותווים מיוחדים

אפשר גם להגדיר טווחים של תווים על ידי שימוש ב - בתוך הקבוצה:

  • [0-9] שווה ערך לקבוצה [0123456789] (כל הספרות)
  • [a-e] שווה ערך לקבוצה [abcde]
  • [a-e1-5] שווה ערך לקבוצה [abcde12345]
  • [a-zA-Z] שווה ערך לקבוצה המכילה את כל אותיות האלפבית האנגלי (גדולות וקטנות)

או על ידי תווים מיוחדים:

  • \w – אות אלפבתית או ספרה
  • \W – הכל חוץ מאותיות אלפבתיות וספרות
  • \d – ספרה
  • \D – הכל חוץ מספרות
  • \s – רווח או שורה חדשה (white space)
  • \S – הכל חוץ מרווחים ושורות חדשות
חשוב לציין שהסימן - בתוך קבוצה מקבל משמעות מיוחדת רק אם הוא מציין טווח. לדוגמה, הביטוי הרגולרי [-123] מחפש את הספרות 1-3 ואת הסימן -

ניתן להשתמש בתווים מיוחדים בתוך סוגריים מרובעים (קבוצת תווים) באופן הבא – לדוגמה, בשביל למצוא ספרות נשתמש בביטוי [\d]

Screen Shot 2015-05-31 at 1.33.02 AM