At 01:59 13.11.2002, Gustaf Sjoberg said:
--------------------[snip]--------------------
>hi,
>i tried to implement the code, but it does not work if the string:
>
>a) doesnt contain any <pre>..</pre>
>b) doesnt contain any <pre>
>c) doesnt contain any </pre>
>d) contains multiple <pre>..</pre>'s
>
>so i altered it a little and this is what i came up with:

Here's my original function, now tested and bugs removed, together with
some comments:

function remove_br_in_pre($string)
{
    $re1 = '/(.*?)<pre>(.*?)<\/pre>(.*)/is';
    $re2 = '/<br>\n?/is';

// setting a variable to "null" defines it, so we don't get
// a warning for an undefined variable at the first concatenation.
// unset($result) doesn't define it, and is unnecessary
// as it is not "set" at this moment.
    $result = null;

// this generates a loop that will remove multiple pre's
    while ($string) {

// my original assignment ($arMatch = preg_match(...)) was wrong.
// preg_match returns 1 on match, and 0 on no match.
        if (preg_match($re1, $string, $arMatch)) {
            $result .= $arMatch[1];

// sorry, forgot to keep the <pre></pre> pairs...
// you need to add a line break instead of the <br>
// to keep your code formatted
            $result .= '<pre>'.preg_replace($re2, "\n", $arMatch[2]).'</pre>';
            $string = $arMatch[3];
        }
        else break;
    }

// if there are no <pre></pre> pairs, $string will be unmodified and the
// loop will immediately break out at the first attempt. This appends
// either the whole $string, or the remaining $string, to the result.
    $result .= $string;
    return $result;
}

>now, i've tried it in a few different scenarios and it seems to be working, 
>although the function might be redundant and far from pretty - it gets the 
>job done. however, i have a question; what does the "is" in //is denote? ;-) 
>(doesnt it feel great to have code sniplets you have no idea what they do in 
>your scripts? ;-))

The regex modifiers:
   i - make that case independent, so <pre>, <PRE>, and others are matched
   s - treat the input as a single line, don't stop at a newline

>also, do you see any direct "bugs slash features" in the current function? 

Not that I'd be aware of...

>thanks in anticipation,

You're most welcome :)

-- 
   >O     Ernest E. Vogelsinger
   (\)    ICQ #13394035
    ^     http://www.vogelsinger.at/



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to