"^[a-zA-Z0-9_]*\.[a-zA-Z]{3,4}$"

"^[a-zA-Z0-9_]*\.[a-zA-Z]{3,4}$"

ereg("^[a-zA-Z0-9_]*\.[a-zA-Z]{3,4}$", $the_name)​
מישהו יכול בבקשה להסביר את הקוד הזה? איך קוראים וכותבים את הקוד הזה? תודה.
 
בצורה הבאה:

מה שאתה רואה מולך זה ביטויים רגולרים (Rexular Expressions - regex). נפרק את השורה לכמה גורמים : 1) ereg - פונקציה שמחפשת במשתנה $the_name את הקיום של ה regex שהוכנס בחלק הראשון של הפונקציה. 2)
^[a-zA-Z0-9_]*\.[a-zA-Z]{3,4}$​
גם את זה נחלק לכמה חלקים: ^ - לא מופיע (הכוונה מוסברת למטה..)
[a-zA-Z0-9_​
כל אות אנגלית קטנה או גדולה, כל ספרה וקו תחתון * - יכול לחזור על עצמו כמה פעמים (גם לא לחזור בכלל) \. - הבקסלאש אומר לפונקציה להתייחס לנקודה כמו אל נקודה רגילה ולא כמו אל תו מיוחד. a-zA-Z - כל אות אנגלית גדולה או קטנה {3,4} יכול להיות רק 3 תווים מהסוג הנ"ל וכל שלושת התווים יכולים לחזור על עצמם 4 פעמים. $ - סוף ביטוי כלשהוא כלומר, אם נרכיב את הכל ביחד, יצא לנו בדיקה האם התוכן של $the_name מכיל כל תו בכמות בלתי מוגבלת חוץ מאותיות אנגליות (קטנות או גדולות), ספרות או קו תחתון שלאחריו תבוא נקודה, ואז חזרה של 4 פעמים על רצף של 3 אותיות באנגלית (גדולות או קטנות) קאפיש?
 
כמעט קאפיש..

^ - לא מופיע (הכוונה מוסברת למטה..) לא הבנתי את זה. הסימן ^ הוא סימן לתחילת ביטוי כמו ש $ הוא סימן לסוף ביטוי? האם הסימנים האלה חייבים להופיע בכל ביטוי כזה? בגדול הבנתי את צורת התחביר, תודה רבה לך.
 
לא.

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

^ מסמן התחלה של הפטרן, בעוד $ מסמן את סופו. הכוונה היא, אם כך, שמה שנמצא בין ה^ אל ה$ הוא כל הסטרינג, ואין עוד דברים מסביב. אני חושב ש^ צריך להיות בתוך סוגריים מרובעים (סאב-פטרן) בשביל שהוא ישלול משהו.
 
משהו לא כל כך מסתדר לי

למשל בקישור הזה: http://il.php.net/manual/en/function.ereg.php מופיעה הדוגמא הבאה:
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)​
מה שאמור להיות בפורמט של תאריך - (YYYY-MM-DD) למה כאן יש שימוש בסוגריים? יש כאן גם את הביטוי הזה עבור החודש למשל -
[0-9]{1,2}​
החודש יכול להיות דו ספרתי, אז למה רשום 1 היכן שאמור להיות מספר הספרות המותרות?
 
אחד אחד..

למה סוגריים? בשורה שאתה נתת מתוך הדוגמא, כל אחד מהנתונים שמוקף בסוגריים, נכנס לתוך מערך שנקרא $regs לפי סדר הסוגריים. ככה שבמקרה הספציפי שאתה נתת (הנה תזכורת:)
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)​
אתה יכול להציג את השנה על ידי שימוש ב
$regs[1]​
בנוגע לביטוי לחודש - הדוגמא הזאתי מחייבת את החודש להיות דו ספרתי כמו 01 או כמו 12. הדוגמא שנתת מחייבת ספרה אחת שחוזרת פעמיים (לא בהכרח אותה ספרה).
 
בולבלתי לגמרי

למשל:
[a-zA-Z]{3,4}​
אם ההתייחסות היא כפי שציינת, ספרה אחת שיכולה לחזור פעמיים (לא בהכרח אותה ספרה) אפשר לומר שבדוגמא שהבאתי עכשיו יש שני סוגי אותיות - אותיות גדולות וקטנות. אם כך למה מצויין שם 3? אני מרגיש שאני לא מוצא את הידיים ואת הרגליים. ואולי זו השעה המאוחרת?
 
אממ,

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

או ספרה אחת או שתי ספרות. 1 או 2. זה מה שכתוב בסוגריים המסולסלות. ~ מלבד הסוגריים המרובעות והסוגריים המסלסלות, יש גם שימוש בסוגרים מעוגלות. בכלליות, הפונקציות מחפשות אם יש פטרן מסויים בסטרינג, תבנית מסויימת במחרוזת. לדוגמה, ereg("[a-z]{3}", $str) יחזיר לי true אם מופיע בstr אות כלשהי שלוש פעמים ברצף, וfalse אם לא. אבל אם אתה רוצה לדעת איזו אות מופיעה 3 פעמים? אתה מוסיף סוגריים: ([a-z]{3}), ואז הפונקציה זוכרת את מה שיש בתוך הסוגריים. הפונקציה ereg משתמשת בסוגריים באופן הזה: מוסיפים בסוף משתנה שלישי (regs בדוגמה שהבאת), וכל פעם שהוא נתקל במה שהוא חיפש, הוא זורק את זה לתוך המערך הזה, המשתנה השלישי. מה שיוצא, הפונקציה ereg("[a-z]{3}", $str, $regs), במידה ותחזיר true, תזרוק את הצירוף שמצאה אל $regs[0].
 
תודה

אני מחפש מקור שמסביר את התחביר הזה. מצאתי את זה עכשיו: http://www.computerworld.com.au/index.php/id;347504672;fp;2;fpid;76768 אבל אם אתה מכיר מקור טוב יותר אשמח לקבל. שוב תודה.
 
למעלה