טוב לכבוד הפיקוח החלטתי לכתוב מדריך פשוט אך יעיל לשימוש בכלי הכל כך יעיל וכל כך פשוט הזה, שמשומה, עוד לא נכתב עליו מדריך בפורום.טוב, אז דבר ראשון, מה הם ביטויים רגולריים?
ביטוי רגולרי, הוא יצירת תבנית, תבנית שתתאים אך ורק לטקסט מסויים, ובמקרים אחרים, תכפה עליו את התבנית המסויימת הזאת.
לצורך הסבר ברור יותר, אתן דוגמא.
הביטוי הבא ייצור תבנית למשפט שיכיל good או very good
לביטוי הזה, גם המילה good וגם very good יהיו נכונים
נכון, זה לא ברור, אבל זה יהיה, בסוף..
כתיבת תבנית
הדבר החשוב ביותר שצריך לזכור, הוא שכל נתון בתבנית, חייב להיות כולל את כל האפשרויות, כדי שלא נפספס כלום.
נתחיל מכמה חלקים בסיסיים:
תחילת משפט - ^
סוף משפט - $
הופך תו רגיל למיוחד, ולהפך (יוסבר בהמשך) - \ כמה הערות חשובות לגבי תחילת וסוף משפט:
הביטויים האלה מחייבים את תחילת וסוף המשפט, ולכן הם ייתחמו את התבנית לתחילת וסוף הטקסט עליו אני עובדים,
כלומר שאם לא נכניס את "תחילת המשפט" אז מספיק שסוף הטקסט תואם לתבנית וטקסט יאושר כתואם, ואני אדגים מאוחר יותר כשנתעסק יותר בביטויים עצמם. איברים
תבנית בנויה מתת חלקים שכל אחד מהם יכול להיתחלק לתת חלקים וכן הלאה, לכל חלק כזה, נקרא "איבר".
תבנית בנויה מאיברים, יכול להיות איבר אחד ויכולים להיות המון.
נוכל לזהות איברים בכל מיני צורות, הכי פשוט, סוגריים, כל זוג סוגריים, תוחמים איבר.
הסוג השני, הוא בעצם כל דבר אחר, זה קצת מבלבל, אבל כן, כל אלמנט שהוספתי, הוא איבר, למשל אם הוספתי את הסימן = (כלומר חייבתי קיום שלו בתבנית) אז ה= הוא איבר.
למה זה חשוב לי? כי כשיש לי איבר אני יכול לשלוט בכמות בה הוא יופיע. ביטויי כמות
אלו הם ביטויי כמות, כל אחד מהם מציין את הכמות של פעמים:
יופיע אפס פעמים או יותר - *
יופיע פעם אחת או יותר - +
יופיע אפס פעמים או פעם אחת - ?
כמות השווה למספר המצוין - {n}
לפחות כמות השווה למספר המצוין ומעלה - {,n}
בין X ל Y התקיימויות של האיבר הקודם - {X,Y} ביטויים מיוחדים
כפי שציינתי בהתחלה, הסימן "\" הופך אות למיוחדת.
הנה כמה שימושיים:
ספרה כלשהי מ0 עד 9 - d\
הכל חוץ מסיפרה - D\
שורה חדשה - n\
רווח לבן - s\
הכל חוץ מרווח לבן - S\
כל אות, מספר או קו תחתון - w\
הכל חוץ מ- כל אות, מספר או קו תחתון - W\ סדרות
אלו הם איברים המכילים סדרה של תווים ברצף מסוים, או שלא.(תחליפו את הסוגריים המסולסלים במרובעים)
סדרה של מספרים בטווח המצויין - {1-16}
סדרה של תוים בטווח המצויין - {a-g}
סדרה של תוים התואמת לאחד התווים המצויינים - {abcde} נוספים
אחד מקביל ל OR אחד האיברים צריך להתקיים - |
טוב זה על רגל אחת כמה ביטויים בסיסיים, ונדגים בעזרת דוגמא טיפה יותר רצינית:הדוגמא המוכרת ביותר, היא תבנית אימייל.
כידוע, אימייל, מכיל מספר אלמנטים קבועים, אותיות, שטרודל ('@') עוד אותיות וסיומת.
אז בואו נחלק את הכללים האלה לחלקים:
טקסט כלשהו, יכיל אותיות, מספרים וקו תחתון.
שטרודל ('@').
טקסט כלשהו, יכיל אותיות, מספרים וקו תחתון.
סיומת, כלומר, טקסט כלשהו שיתחיל בנקודה.
אנחנו נבנה את התבנית הזאת בתור התחלה, למרות שניתן לשדרג את זה ולהוסיף עוד כמה חלקים, אבל, אח"כ.
שלב ראשון, אנחנו רוצים שהאימייל יופיע לכל אורך הטקסט, מההתחלה לסוף, ולכן נציב סימני התחלה וסוף:
שלב שני, נעבור לפי השלבים, טקסט כלשהו, אותיות, מספרים וקו תחתון,ולכן
ה+ כמובן מציין, שטקסט מסויים חייב להופיע אבל המינימום הוא אחד, ויכול להיות אף יותר.
הסימן הבא הוא שטרודל ונוסיף אותו כמו שהוא, היות ואין לו משמעות מיוחדת
אח"כ יש לנו שוב, טקסט כלשהו
ואז סיומת, חשוב לציין שסיומת היא בעצם: נקודה ואחריה טקסט, הבעיה היא, שחלק מהסיומות הן בעלות מילה אחת (למשל .com) וחלק בנות שתי מילים (למשל .co.il)
ולכן אץ איבר הסיומת ניאלץ לאפשר שייתקיים יותר מפעם אחת.
האיבר יראה ככה:
האיבר הזה הוא בעצם: איבר של נקודה, שיש לפניה "\" לצורך "בריחה", היות ולתו הנקודה יש משמעות משלו, ומייד אחריו \w+ המאפשר תוים של אותיות ספרות וקו תחותון.
עכשיו נשים את האיבר הזה הסוגריים
ונאפשר לכל הדבר הזה להתקיים פעם אחת ומעלה, איך? בעזרת "+":
ואת כל הקטע הזה נדחוף לתוך מה שהכנו קודם:
אוקי, סיימנו משפט אחד מאוד פשוט ובסיסי, ובכ"ז אני בטוח שמי שפעם ראשונה רואה את זה, חוטף שפעת. אבל אם תעברו שלב שלב, תראו שזה לא כזה מסובך.
למעשה, המשפט המלא הרבה יותר ארוך, עם יותר סיבוכים, אבל נכון למדריך הנוכחי זה מספיק.
במדריך הבא אני אסביר עוד תוים, עוד שימושים, וכמובן דוגמאות.
בהצלחה!