אז מהו בעצם רגאקס?
יש לי 2 דרכים להסביר את זה, אתחיל במדעית המסובכת.
רגאקס היא פונקציה אשר מקבלת 2 נתונים: טקסט ותבנית. הפונקציה בודקת האם הטקסט שניתן מתאים לתבנית שניתנה. במידה וכן: 1, במידה ולא: 0.
הדרך השנייה להסביר את זה היא ע"פ הסיפור הבא:
פרופסור רייך מאוניברסיטת שקר כלשהו מצא עבודה, הוא בודק מכוניות של רנו. הוא מקבל רכב + דף עם רשימה שבה כל הדברים שהוא צריך לבדוק. לאחר שהוא בודק כל דבר הוא צריך לסמן V או X ליד הפריט שהוא בדק האם הוא תקין או לא.
פרופסור רייך קיבל את המכונית הראשונה, הרשימה הייתה כזאת:
קוד: בחר הכל
[ ] 3 מראות
[ ] 4 גלגלים
[ ] 5 כיסאות
[ ] 6 חלונות
אפשר להדמות את פרופסור רייך כרגאקס, את המכונית כטקסט ואת הרשימה כתבנית. הלוא פרופסור רייך בודק את המכונית שלב שלב וכך גם הרגאקס, בודק את הטקסט שהוא מקבל האם הוא עומד בתנאי התבנית.
רגאקס דורש לוגיקה ברמה מאוד, אבל מאוד גבוהה מהכותב של התבנית, לא כל אחד יכול ולוגיקה זה דבר שצריך לפתח במשך זמן וכשמדובר ברגאקס מדובר בהרבה זמן.
אגב לפי הפקודה במירק:
קוד: בחר הכל
$regex(text,pattern)
לאחר שהבנו מהו רגאקס, איך משתמשים בו?
קצת קשה לי להגיד לכם מאיפה להתחיל, אז בואו נתחיל בסימני יסוד ברגאקס:
קוד: בחר הכל
\ = תו שבירה, אותו אוכל להסביר רק בהמשך כי אין שום סיכוי שתבינו עכשיו, מנסיון.
d = מספר (0-9), כל ספרה שהיא.
D = (די גדולה) כל דבר שהוא לא מספר
(בשלב זה אפשר להסביר כי כל דבר ברגאקס כאשר נכתב באות גדולה לדוגמא d וD, מסמל את ההפך, אם d זה ספרה, D זה כל דבר שהוא לא ספרה)
s = רווח (תו ריק)
S = כל דבר שהוא לא רווח
. = כל תו
w = תו של מילים כמו מספר, אות ואפילו קו תחתון.
W = (דאבל-יו גדולה) כל דבר שהוא לא תו של מילים.
^ = התחלת משפט
$ = סוף משפט
* = אומר שהתו שבא לפניו יכול לחזור מספר פעמים או לא להיות בכלל
? = אומר שהתו שבא לפניו יכול לחזור פעם אחת או לא להיות בכלל
+ = אומר שהתו שבא לפניו חייב להיות, אבל יכול גם לחזור כמה פעמים, אבל חייב להיות (בשונה מ "*" ו"?")
{n} = אומר שהתו שבא לפניו יכול לחזור על עצמו (או להיות במידה וn = 1) כn פעמים.
{nx,ny} = אומר שהתו שבא לפניו יכול לחזור על עצמו בין nx ל ny פעמים
[] = מסמל טווח של סימנים
/../ = מסמל מבנה.
אז אחרי ששיננתם טוב טוב בראש את הסימנים ואת מה שהם אומרים (גם בלי להבין הכל), הגיע הזמן להגיע לעבודה.
אז בואו ניצור מסגרת שבודקת האם טקסט מתחיל באות גדולה, אם כן: החזר 1. אם לא: החזר 0.
פה נשתמש ב5 דברים:
1. [] = מסמל טווח של סימנים
2. + = אומר שהתו שבא לפניו חייב להיות, אבל יכול גם לחזור כמה פעמים, אבל חייב להיות (בשונה מ "*" ו"?")
3. /../ = מסמל מבנה.
4. ^ = התחלת משפט
5. $ = סוף משפט
2. + = אומר שהתו שבא לפניו חייב להיות, אבל יכול גם לחזור כמה פעמים, אבל חייב להיות (בשונה מ "*" ו"?")
3. /../ = מסמל מבנה.
4. ^ = התחלת משפט
5. $ = סוף משפט
קוד: בחר הכל
//
עכשיו נגדיר לו התחלה וסוף:
קוד: בחר הכל
/^/
עכשיו, איך בודקים האם האות הראשונה היא אות גדולה? יוצרים טווח של אותיות גדולות: [A-Z]
קוד: בחר הכל
/^[A-Z]$/
יענו, אם נכניס לתבנית הזאת את האות n, זה לא יעבוד, כי n נמצאת בטווח של a-z או A-Z (אותיות גדולות).
עכשיו, לפי ההגיון, לאחר האות הגדולה (הראשונה בשם של בנאדם) צריכות לבוא אותיות שלא חשוב אם הן קטנות או גדולות, העיקר אותיות, וחייבת להיות אחת לפחות. זאת אומרת, יש אפשרות שיקראו לבנאדם An, אבל אין מצב שיקראו לו רק A, אז צריך מסגרת שאומרת שחייבת אות גדולה ראשונה, לאחר מכן מספר אותיות, לפחות אחת.
אז עכשיו נבנה טווח של אותיות, גם קטנות גם גדולות:
קוד: בחר הכל
[A-Za-z]
ונכניס את זה למסגרת:
קוד: בחר הכל
/^[A-Z][A-Za-z]$/
An
Ap
Asfo
Ap
Asfo
אבל אנחנו רוצים שאי אפשר שהשם של הבנאדם יהיה
As$
אז כאן נשתמש ב+ (תזכורת: אומר שהתו שבא לפניו חייב להיות, אבל יכול גם לחזור כמה פעמים, אבל חייב להיות) ונשים אותו לאחר ה[A-Za-z] וזה יראה כך:
קוד: בחר הכל
/^[A-Z][A-Za-z]+$/
עכשיו, נכניס את זה למירק.
קוד: בחר הכל
//echo -ag $regex(Yonatan,/^[A-Z][A-Za-z]+$/) should return 1
//echo -ag $regex(Ohad,/^[A-Z][A-Za-z]+$/) should return 1
//echo -ag $regex(mIRCs,/^[A-Z][A-Za-z]+$/) should return 0
//echo -ag $regex(www.mIRCs.co.il,/^[A-Z][A-Za-z]+$/) should return 0
ברגאקס קיימים עוד הרבה תווים שלא אפילו הצגתי פה אפילו שהם בין הבסיסיים והחשובים ביותר, אך זהו רק המדריך הראשון בנושא.