עמוד ראשי מירק סקריפטינג מדריכים [מדריך] Regex חלק ראשון

[מדריך] Regex חלק ראשון

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

ZxoR
מנהל גלובאלי
[מדריך] Regex חלק ראשון
הצטרף: 01 יולי 2010, 07:43
הודעות: 370
פורסם: 06 אוגוסט 2011, 00:27
שלום, ברוכים הקוראים למדריך הרגאקס בעברית למתחילים, זהו החלק הראשון של המדריך ויש לי כמה דברים להגיד לפני-כן: אני לא מזלזל ברמת הרגאקס שלי, אך היא אינה מקצועית ואני לא יודע את כל האפשרויות שמציע הרגאקס או איך להשתמש בהם (בספק אם יש בכלל ישראלי במירק שיודע), מספר היודעים רגאקס הישראלים יכול להספר על 10 אצבעות עם עצבעות ספייר וזאת לצערי. מדובר בנושא שנחשב מסובך, רגאקס נחשבת לבין הספריות בעלות היותר אפשרויות ופרמטרים שקיימות למחשב. רגאקס היא ספריה גלובאלית, משמע היא לא קיימת רק במירק אלא בכל שפת תכנות ונכתבה כבר לכל פלטפורמה אפשרית לפי דעתי.

אז מהו בעצם רגאקס?
יש לי 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. $ = סוף משפט
קודם כל, ניצור מבנה:
//
יצרנו, היה קשה? לא.

עכשיו נגדיר לו התחלה וסוף:
/^/

עכשיו, איך בודקים האם האות הראשונה היא אות גדולה? יוצרים טווח של אותיות גדולות: [A-Z]
/^[A-Z]$/
מה שאומר, שהמבנה שלנו מכיל אות גדולה אחת וזהו, ומסתיימת.
יענו, אם נכניס לתבנית הזאת את האות n, זה לא יעבוד, כי n נמצאת בטווח של a-z או A-Z (אותיות גדולות).

עכשיו, לפי ההגיון, לאחר האות הגדולה (הראשונה בשם של בנאדם) צריכות לבוא אותיות שלא חשוב אם הן קטנות או גדולות, העיקר אותיות, וחייבת להיות אחת לפחות. זאת אומרת, יש אפשרות שיקראו לבנאדם An, אבל אין מצב שיקראו לו רק A, אז צריך מסגרת שאומרת שחייבת אות גדולה ראשונה, לאחר מכן מספר אותיות, לפחות אחת.
אז עכשיו נבנה טווח של אותיות, גם קטנות גם גדולות:
[A-Za-z]

ונכניס את זה למסגרת:
/^[A-Z][A-Za-z]$/
המסגרת שלנו תתאים עכשיו לכל שם שמכיל 2 אותיות שהראשונה חייבת להיות גדולה לדוגמא:
An
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

ברגאקס קיימים עוד הרבה תווים שלא אפילו הצגתי פה אפילו שהם בין הבסיסיים והחשובים ביותר, אך זהו רק המדריך הראשון בנושא.
שימו לב: בוטי המשחק שאני בונה לא מתאימים לQuakenet אלא אם כן צויין אחרת.
<+vendetta-> סיאג לחוכמה שתיקה
<+vendetta--> בא לי מוח
<Ninja`> דפקתי נקנקיה

הצטרף: 15 אוגוסט 2010, 14:55
הודעות: 20
פורסם: 06 אוגוסט 2011, 10:07
תודה רבה יונתן מצפה להמשך D:

הצטרף: 20 יוני 2011, 21:35
הודעות: 100
פורסם: 06 אוגוסט 2011, 12:29
תודה, מקווה שעוד יהיו הרבה בדרך!!!! :)


חזור אל מדריכים

cron