![]() |
הסתבכות עם REGEX.
טוב אז כבר ניסית הכל אבל לא הולך לי.
כעקרון מה שאני עושה זה לקבל תוכן של אתר ע"י file_get_contents ואז להוריד ממנו את ה- IFRAME ממנו ואז להדפיס , ככה שמה שיצא כשאני מדפיס אותו הוא האתר ללא ה- IFRAMES וללא התוכן שלו. אשמח אם מישהו יכול להביא לי איזה קוד שיכול לסדר את זה. מה שיצא לי עד עכשיו זה זה : PHP קוד:
אשמח לעזרה , אני מתחיל להתיאש מזה. תודה , מור. |
לא תקבל פה קוד מוכן.
נסה לחפש באינטרנט, להשתמש בביטויים לא חמדניים קוד:
.*? /// .+? |
ציטוט:
|
strip tags לא עוזר.
ניסיתי לחפש את מה שהבאת אבל זה מביא תוצאות לא רלוונטיות. אפשר אולי איזה לינק? |
ציטוט:
קוד:
<hello> i'm <omer> קוד:
<(.*)> התכונה הזו של ביטויים רגולריים נקראת חמדנות. ישנן 2 דרכים לטפל בחמדנות. האחת פשוטה למימוש גם בקטעים קיימים, אבל היא עובדת עם מודיפיקטור U - Ungreedy. אני מעדיף להשתמש בשיטה השניה: קוד:
<(.*?)> הערת אגב, אם מופעל המודיפיקטור U הפעולה שמבצע הסימן שאלה הפוכה (מחזיר לחמדנות). ציטוט:
|
בדיוק .
|
אז למה הפונקציה? הקוד שאתה בונה צריך לכלול את הביטוי הבא:
-פתיחת תג IFRAME (כלומר <iframe ) -נתונים בתוכו (SRC, FRAMEBORDER וכו') -סגירת תג IFRAME (כלומר >) -תוכן בין התג הפותח לתג הסוגר -תג סוגר (</iframe>). הביטוי פשוט יחסית. נסה לחשוב איך כותבים אותו, תשתמש בטיפ שנתתי לך על החמדנות. אגב, בסיטואציה הזאת הייתי משתמש בנקודה (.) עם המודיפיקטור s. |
חיפשתי ככה בהתחלה :
PHP קוד:
|
קוד:
~<\s*iframe(.*?)>.*?<\s*/\s*iframe>~ |
ציטוט:
קוד:
Unknown modifier '.' |
לא יודע מה עשית. השתמשתי ב~~ במקום ב//, אולי עשית משהו אחר. לפי זה יש לך אחרי הסגירה נקודה בלי סיבה.
|
כן , זאת הייתה הבעיה.
הרבה אנשים ששנים בתחום לא ידעו איך לפתור לי את זה. תודה רבה רבה. ד"א אתה יכול לתת לי את המקור שממנו למדת REGEX? משום מה מאיפה שאני למדתי הם נותנים שם חומר של מציאת מחרוזות ולא שום דבר אחר מעל הרמה הבסיסית. |
אין על מה.
את הבסיס למדתי פה - זה היה כמו סינית בשבילי. הייתי צריך לשבת ולהתאמין עם שרת פתוח. פשוט ישבתי והרצתי ביטויים עד שהבנתי מה רוצים ממני... הרחבות למדתי דרך דוגמאות ודרך php.net. מן הסתם יש ברשת אי שם אתר שמלמד את הנושא כמו שצריך, אבל מניסיון שלי, אין כמו ניסוי וטעייה בשביל ללמוד. |
אם היית מסתכל בתגובות לפונקציה strip_tags היית מוצא לא מעט פתרונות כאלו:
PHP קוד:
PHP קוד:
|
תעשה ככה
קוד:
~<\s*iframe.*>.*<\s*/\s*iframe\s*>~Uis בהצחה |
ציטוט:
iFRaME ולא רק iframe בנוסף שימוש במודיפיקטור U שגורם לדברים כמו .+ לא להיות חמדניים אובר על המידה ולתפוס דברים שאתה לא צריך בנוסף יש את המודיפיקטור s קטנה שאומר שנקודה יכולה לתפוס גם תווים לבנים כמו \t \n \r רווחים וכו' בנוסף, אני לא חושב שזה תיקני לשים רווחים בין הסוגר המשולש הראשון ל iframe כלומר ככה: < iframe קיבצתי הכל לביטוי אחד שאמור לתפוס הכל בתגובה הקודמת, אף על פי שאני לא חושב שצריך להשתמש ב \s* בין הסוגרים אבל תפאדל בהצלחה עם זה שבוע טוב |
ציטוט:
לגבי i , אין ממש צורך אם הוא מכיר את האתר ויודע שהוא משתמש ב<iframe>. אגב, .*? זה כמו .* עם U. קרא על זה בעמוד הקודם. |
ציטוט:
|
פשש סחטיין, שיהיה בהצלחה (:
|
כל הזמנים הם GMT +2. הזמן כעת הוא 21:29. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ