Home > Archive > PHP Smarty Templates > May 2004 > Re: [SMARTY] pattern matchin pproblem
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Re: [SMARTY] pattern matchin pproblem
|
|
| Monte Ohrt 2004-05-12, 11:59 am |
| Maybe uncomment that first line in the function?
pete M wrote:
> I'm using this code from the wiki. Its designed to highlight text like
> Google search.
>
> The only problem with it is that its case sensitive.
>
> I'm not an expert by any stretch of the imagination when it comes to
> pattern matching. I've read the manual and I still don't know where to
> even start !!!
>
> Can someone help please ?
>
> regards
> Pedro
>
> function smarty_modifier_highlight ($text, $search)
> {
> //$text = strtolower($text);
> // Init vars
> static $_search_phrases;
> $i = 0;
> $colors = array(
> '#ffff00','#00ffff','#99ff99','#ff9999',
'#ff66ff',
> // black on color hilights
> '#880000', '#00aa00', '#886800', '#004699', '#990099');
> // white on color hilights
>
> // Load saved terms if they have already been parsed.
> if (!$_terms = (array)$_search_phrases[$search]) {
> // pull out quoted strings
> preg_match_all( '/"(.*?)"/', $search, $_quotes);
> // split on whitespace
> $_terms = array_merge((array)$_quotes[1], explode(' ', preg_replace(
> '/".*?"/', ' ', $search )));
> $_search_phrases[$search] = $_terms;
> }
>
> // Loop through each term and highlight
> foreach (array_unique($_terms) as $val) {
> // Strip any stray non-matched double quotes and check for empty string
> if (!$val = trim(str_replace('"', '', $val)))
> continue;
> if ($i == 10) $i = 0;
> $font_color = ($i > 4) ? 'white': 'black';
> //$style = '<span style="color:' . $font_color . ';background-color:'
> . $colors[$i++] . '">';
> $style = '<span class="highlight">';
> // AUTHOR NOTE: this is buggy because if you search for 'style' after
> at least one replace,
> // the str_replace will find it inside the <b tag. What's needed to
> fix this: a regex
> // to be used in a preg_replace call that will not replace anything
> between <b style...
> $text = str_replace($val, "$style$val</span>", $text);
> // $text = preg_replace("/($val)/i", $style . '$1' . '</b>', $text);
> }
>
> return $text;
> }
>
| |
| Daniel Cummings 2004-05-12, 12:00 pm |
| On 5/12/04 10:34 AM, "pete M" <pmorgan@ukds.net> wrote:
> // $text = preg_replace("/($val)/i", $style . '$1' . '</b>', $text);
This is a PHP question.
The answer is right there in the code, commented out. The i switch tells
preg_replace to be caseless.
check out:
http://us3.php.net/manual/en/pcre.pattern.modifiers.php
dan
|
|
|
|
|