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

הוסטס - פורום אחסון האתרים הגדול בישראל (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)

BlueNosE 07-10-10 20:44

לא יודע מה עשית. השתמשתי ב~~ במקום ב//, אולי עשית משהו אחר. לפי זה יש לך אחרי הסגירה נקודה בלי סיבה.

morsrh 07-10-10 21:40

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

BlueNosE 08-10-10 15:02

אין על מה.
את הבסיס למדתי פה - זה היה כמו סינית בשבילי. הייתי צריך לשבת ולהתאמין עם שרת פתוח. פשוט ישבתי והרצתי ביטויים עד שהבנתי מה רוצים ממני... הרחבות למדתי דרך דוגמאות ודרך php.net. מן הסתם יש ברשת אי שם אתר שמלמד את הנושא כמו שצריך, אבל מניסיון שלי, אין כמו ניסוי וטעייה בשביל ללמוד.

Erez | TrustMedia.co.il 08-10-10 15:14

אם היית מסתכל בתגובות לפונקציה strip_tags היית מוצא לא מעט פתרונות כאלו:
PHP קוד:

<?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;
}

$str '<font color="red">red</font> text';
$tags 'font';
$a strip_only($str$tags); // red text
$b strip_only($str$tagstrue); // text
?>

PHP קוד:

function strip_selected_tags($str$tags ""$stripContent false)
{
    
preg_match_all("/<([^>]+)>/i"$tags$allTagsPREG_PATTERN_ORDER);
    foreach (
$allTags[1] as $tag) {
        
$replace "%(<$tag.*?>)(.*?)(<\/$tag.*?>)%is";
        
$replace2 "%(<$tag.*?>)%is";
        echo 
$replace;
        if (
$stripContent) {
            
$str preg_replace($replace,'',$str);
            
$str preg_replace($replace2,'',$str);
        }
            
$str preg_replace($replace,'${2}',$str);
            
$str preg_replace($replace2,'${2}',$str);
    }
    return 
$str;


ויש שם עוד כמה, פעם הבאה תעבור על התגובות שם, יש שם אחלה פונקציות שעוזרות המון

intercooler3819 09-10-10 12:27

תעשה ככה
קוד:

~<\s*iframe.*>.*<\s*/\s*iframe\s*>~Uis
לא ניסיתי אמור לעבוד

בהצחה

intercooler3819 09-10-10 12:31

ציטוט:

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

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

קח בחשבון להוסיף את המודיפיקטור i שגורם ל INcaseSENSITIVE שיגרום גם לתפיסה של
iFRaME
ולא רק iframe

בנוסף שימוש במודיפיקטור U שגורם לדברים כמו .+ לא להיות חמדניים אובר על המידה ולתפוס דברים שאתה לא צריך
בנוסף יש את המודיפיקטור s קטנה שאומר שנקודה יכולה לתפוס גם תווים לבנים כמו \t \n \r רווחים וכו'

בנוסף, אני לא חושב שזה תיקני לשים רווחים בין הסוגר המשולש הראשון ל iframe כלומר ככה:
< iframe

קיבצתי הכל לביטוי אחד שאמור לתפוס הכל בתגובה הקודמת, אף על פי שאני לא חושב שצריך להשתמש ב \s* בין הסוגרים אבל תפאדל

בהצלחה עם זה

שבוע טוב

BlueNosE 09-10-10 13:44

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 782535)
קח בחשבון להוסיף את המודיפיקטור i שגורם ל INcaseSENSITIVE שיגרום גם לתפיסה של
iFRaME
ולא רק iframe

בנוסף שימוש במודיפיקטור U שגורם לדברים כמו .+ לא להיות חמדניים אובר על המידה ולתפוס דברים שאתה לא צריך
בנוסף יש את המודיפיקטור s קטנה שאומר שנקודה יכולה לתפוס גם תווים לבנים כמו \t \n \r רווחים וכו'

בנוסף, אני לא חושב שזה תיקני לשים רווחים בין הסוגר המשולש הראשון ל iframe כלומר ככה:
< iframe

קיבצתי הכל לביטוי אחד שאמור לתפוס הכל בתגובה הקודמת, אף על פי שאני לא חושב שצריך להשתמש ב \s* בין הסוגרים אבל תפאדל

בהצלחה עם זה

שבוע טוב

תקרא את מה שרשמתי בעמוד הקודם, דיי מילה במילה מה שרשמת פה.
לגבי i , אין ממש צורך אם הוא מכיר את האתר ויודע שהוא משתמש ב<iframe>.
אגב, .*? זה כמו .* עם U. קרא על זה בעמוד הקודם.

intercooler3819 09-10-10 14:10

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 782540)
תקרא את מה שרשמתי בעמוד הקודם, דיי מילה במילה מה שרשמת פה.
לגבי i , אין ממש צורך אם הוא מכיר את האתר ויודע שהוא משתמש ב<iframe>.
אגב, .*? זה כמו .* עם U. קרא על זה בעמוד הקודם.

את האמת לא ראיתי את הסימן שאלה |Lol| חוסר שעות שינה כדי שאני ארדם בערב (מחר גיבוש טיס)

BlueNosE 09-10-10 14:39

פשש סחטיין, שיהיה בהצלחה (:


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

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