regular expression על קצה הפוסט – חלק שני

בחלק הקודם הצגתי בקצרה מאוד מה זה Regular Expression.

אבל ממש לא סיימתי להציג את השפה עצמה.

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

מחלקה הסבר
:alnum: תווים של הא' ב' האנגלי ומספרים
:alpha: תווי הא' ב' האנגלי בלבד
:blank: תווי רווחים "לבנים", כדוגמת space וטאב
:cntrl: תווי בקרה
:digit: ספרות מ0 ועד 9
:graph: תווים הניתנים להצגה פיזית לאנשים, לא כולל תווי רווחים "לבנים"
:lower: תווי הא' ב' האנגלים כאותיות קטנות בלבד
:print: כל התווים הניתנים להדפסה ותצוגה כולל רווחים "לבנים"
:punct: כלל הסימנים הניתנים להפקה במקלדת ASCII אשר אינם אותיות או מספרים. לרוב הסימנים של shift+מספר, וכן סוגריים
:space: כל מה שמוגדר כרווח "לבן"
:upper: אותיות הא' ב' האנגלי, כאותיות גדולות בלבד
:‎xdigit: ספרות של מספר בבסיס הקסה-דצימאלי

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

/^([:upper:][:lower:]+)/

* תו ה slash, מסמן בהמון מקומות את התיחום של regex, אם כי לא בכל מקום יש חובה להשתמש בו, וזה תלוי במימוש המנוע.

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

Hello World

נקבל את הטקסט במבנה הזה למשל:

hello world

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

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

\( \)

בשביל לייצג backshalsh נשתמש בו פעמיים:

\ \

אך אין זה השימוש היחיד שיש בתו ה backslash. ישנם תווים כדוגמת "ירידת שורה":

\ n

או

\ r

אשר יקבלו ייצוג שכזה באמצעות backslash.
*יש להשתמש בהם ללא רווח (אשר הוכנס רק על מנת לגרום לאתר להציג אותם)

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

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

[a-hA-H]

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

color
colour

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

^(colo[u]?r)$

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

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s