זקוק לעזרה דחופה בegular Expression

hananc

New member
זקוק לעזרה דחופה בegular Expression

יש לי קובץ טקסט ענק עם מספרים בפורמאט 1.23.45/678 הבעיה היא שהמספר הפוך. צריך להיות 1.23.678/45 מספר הספרות בכל חלק של המספר יכול להשתנות. תמיד יותר מספרה אחת עד שלוש. אין עוד מספרים בפורמאט דומה בכל הקובץ. רק זה. אני זקוק דחוף היסטרי לרגולר אקספרשן שיחליף בין שני הצדדים של הסלאש. הקוד אמור להיות כזה האם השורה מכילה מספר בפורמאט הזה? אם כן, החזר שורה עם הפורמאט הנכון. מישהו יכול לעזור לי? תודה חנן כהן
 

shanor

New member
מממ...

טוב, תנסה את זה: לא בדקתי, אז יכול להיות שלא ממש יתאים למה שאתה צריך אבל נראה לי שזה צריך לעבוד.
$St='1.23.45/678'; ereg("([0-9]+\/[0-9]+)",$St, $SleshSection); $SelshNumbers=explode('/',$SleshSection[0]); $NewSt=ereg_replace("([0-9]+\/[0-9]+)",$SelshNumbers[1]."/".$SelshNumbers[0],$St); echo $NewSt;​
ועכשיו להסבר: המספר שלך (שהוא לא ממש מספר אלא יותר מתאים להגדרה של STRING, הוכנס לתוך סטרינג שעליו נעבוד. שורה שניה מוצאת את המיקום שעליו יש את הסלש "/" ואת המספרים שלפניו ואחריו, ומכניסה אותם לתוך מערך שהאיבר הראשון שלו הוא הקטע הזה. שורה שלישית - פיצול של הקטע שהתקבל בשורה 2 כך שמתקבל מערך עם שני איברים שבהם כל אחד מהמספרים הראשון באיבר 0 והשני באיבר 1. שורה רביעית לוקחת את הסטרינג המקורי מחפשת (שוב) את הקטע עם הסלש והמספרים שלפניו ואחריו, ומחליפה אותם על פי הסדר החדש שדרוש (ושאותו קיבלנו באיברים של שורה 3). שורה 5 מוציאה את הסטרינג החדש החוצה... זהו. עכשיו שוב אני אומר, אין כאן בדיקת שגיאות אין בדיקה של מצבים של יותר מסלש אחד בסטרינג כזה, אין כאן אפשרות למצב של סלש בלי מספרים לפניו ואחריו. הפורמט הזה יתאים אך ורק לפורמט שנתת כאן. מקווה שזה עוזר במשהו, אני יודע שיש דרכים קצרות יותר אבל לשם הפירוט וקלות ההסבר לדעתי, הדרך הזו עדיפה. בהצלחה, שנאור.
 

N i X

New member
לא regex, אבל עובד ;)

<? function fix_str($st) { $part = explode(".", $st); $end_part = explode("/", $part[2]); return $part[0] . "." . $part[1] . "." . $end_part[1] . "/" . $end_part[0]; } $mystr = '1.23.45/678'; print(fix_str($mystr)); // return 1.23.678/45 ?>​
 
למעלה