Ah, very nice Ernest. thanks a lot. the nice thing is that i read and understood the regexp so i got a great deal out of having this problem ;-)
cheers, GS On Wed, 13 Nov 2002 08:28:30 +0100 [EMAIL PROTECTED] (Ernest E Vogelsinger) wrote: >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/ > > -- Gustaf Sjoberg <[EMAIL PROTECTED]> <(" <) <(" )> <( ")> (> ")> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php