הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   הסתבכות עם REGEX. (https://hosts.co.il/forums/showthread.php?t=85538)

morsrh 07-10-10 13:43

הסתבכות עם REGEX.
 
טוב אז כבר ניסית הכל אבל לא הולך לי.
כעקרון מה שאני עושה זה לקבל תוכן של אתר ע"י file_get_contents ואז להוריד ממנו את ה- IFRAME ממנו ואז להדפיס , ככה שמה שיצא כשאני מדפיס אותו הוא האתר ללא ה- IFRAMES וללא התוכן שלו.

אשמח אם מישהו יכול להביא לי איזה קוד שיכול לסדר את זה.
מה שיצא לי עד עכשיו זה זה :
PHP קוד:

function strip_only($str$tags$stripContent false)
{
    
$content '';
    if(!
is_array($tags))
    {
        
$tags = (strpos($str'>') !== false explode('>'str_replace('<'''$tags)) : array($tags));
        if(
end($tags) == ''array_pop($tags);
    }
    foreach(
$tags as $tag)
    {
        if (
$stripContent)
             
$content '(.+</'.$tag.'[^>]*>|)';
         
$str preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is'''$str);
    }
    return 
$str;


ובכל זאת זה מוריד לי חצי מהאתר.
אשמח לעזרה , אני מתחיל להתיאש מזה.
תודה , מור.

BlueNosE 07-10-10 14:37

לא תקבל פה קוד מוכן.
נסה לחפש באינטרנט, להשתמש בביטויים לא חמדניים
קוד:

.*?    ///    .+?
או
~expression~U

ואולי לעבוד עם strip_tags יעזור לך.

BAMB 07-10-10 14:45

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 782366)
לא תקבל פה קוד מוכן.
נסה לחפש באינטרנט, להשתמש בביטויים לא חמדניים
קוד:

.*?    ///    .+?
או
~expression~U

ואולי לעבוד עם strip_tags יעזור לך.

מה זה הקוד שהבאת?

morsrh 07-10-10 15:34

strip tags לא עוזר.
ניסיתי לחפש את מה שהבאת אבל זה מביא תוצאות לא רלוונטיות.
אפשר אולי איזה לינק?

BlueNosE 07-10-10 15:59

ציטוט:

נכתב במקור על ידי BAMB (פרסם 782367)
מה זה הקוד שהבאת?

קוד:

<hello> i'm <omer>
ניקח מצב לדוגמא בו אתה צריך לשלוף את כל מה שבין < ל->.
קוד:

<(.*)>
כל מתכנת מנוסה ישים לב שהביטוי הבא יתן תוצאה בודדת והיא hello> i'm <omer.
התכונה הזו של ביטויים רגולריים נקראת חמדנות.

ישנן 2 דרכים לטפל בחמדנות. האחת פשוטה למימוש גם בקטעים קיימים, אבל היא עובדת עם מודיפיקטור U - Ungreedy. אני מעדיף להשתמש בשיטה השניה:
קוד:

<(.*?)>
שים לב להבדל הקטן. כעת יתקבלו 2 תשובות: hello, omer.

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

ציטוט:

נכתב במקור על ידי iwnfyM (פרסם 782370)
strip tags לא עוזר.
ניסיתי לחפש את מה שהבאת אבל זה מביא תוצאות לא רלוונטיות.
אפשר אולי איזה לינק?

בשביל להבין מה אתה מבקש. אתה רוצה להוציא את תגי הIFRAME ואותם בלבד מהעמוד?

morsrh 07-10-10 16:16

בדיוק .

BlueNosE 07-10-10 18:27

אז למה הפונקציה? הקוד שאתה בונה צריך לכלול את הביטוי הבא:
-פתיחת תג IFRAME (כלומר <iframe )
-נתונים בתוכו (SRC, FRAMEBORDER וכו')
-סגירת תג IFRAME (כלומר >)
-תוכן בין התג הפותח לתג הסוגר
-תג סוגר (</iframe>).

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

morsrh 07-10-10 18:49

חיפשתי ככה בהתחלה :
PHP קוד:

'/\<{1}iframe(.*)\<{1}\/{1}iframe\>{1}/' 

אבל זה הוריד לי חצי מהאתר.

BlueNosE 07-10-10 18:57

קוד:

~<\s*iframe(.*?)>.*?<\s*/\s*iframe>~
משהו בסגנון הזה (למה לכמת את הקצוות ב{1}?)

morsrh 07-10-10 19:12

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 782395)
קוד:

~<\s*iframe(.*?)>.*?<\s*/\s*iframe>~

קוד:

Unknown modifier '.'
מה זאת אומרת השאלה? למה לא?


כל הזמנים הם GMT +2. הזמן כעת הוא 03:55.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ