highlighting regex matches

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • semi_evil@inbox.com

    highlighting regex matches

    I'm trying to achieve the following:

    start form entry
    user enters form data and submits ($form_data)
    preg_match_all data for $pattern, store matches in $match_arr
    if one or more matches
    display string back to user, with matched substrings in different
    color/emphasis
    start form entry again
    else continue

    my initial solution to recontructing the string:
    // if 1 match
    preg_replace ($pattern,'<em> '.$match_arr[0][0].'</em>',$form_data ,1);
    // if multiple matches
    preg_replace ($pattern,'<em> '.$match_arr[0].'</em>',$form_data ,-1);

    ...but the latter doesn't work the way I hoped. When the replace var is
    an array $pattern also must be an array for preg_replace to use the
    different array values in $replace.

    Any ideas how to get around this problem in an elegant manner? Or an
    alternative solution altogether? I searched for a function/solution
    that tells me at which position preg_match_all( ) found a match, so I
    can avoid the preg_replace altogether, but I haven't found any.

    cheers,
    Semi

  • gosha bine

    #2
    Re: highlighting regex matches

    On 23.05.2007 15:37 semi_evil@inbox .com wrote:
    I'm trying to achieve the following:
    >
    start form entry
    user enters form data and submits ($form_data)
    preg_match_all data for $pattern, store matches in $match_arr
    if one or more matches
    display string back to user, with matched substrings in different
    color/emphasis
    start form entry again
    else continue
    >
    my initial solution to recontructing the string:
    // if 1 match
    preg_replace ($pattern,'<em> '.$match_arr[0][0].'</em>',$form_data ,1);
    // if multiple matches
    preg_replace ($pattern,'<em> '.$match_arr[0].'</em>',$form_data ,-1);
    >
    ..but the latter doesn't work the way I hoped. When the replace var is
    an array $pattern also must be an array for preg_replace to use the
    different array values in $replace.
    >
    Any ideas how to get around this problem in an elegant manner? Or an
    alternative solution altogether? I searched for a function/solution
    that tells me at which position preg_match_all( ) found a match, so I
    can avoid the preg_replace altogether, but I haven't found any.
    >
    cheers,
    Semi
    >
    I think you're looking for PREG_OFFSET_CAP TURE flag (see preg_match_all
    manual page).

    --
    gosha bine

    extended php parser ~ http://code.google.com/p/pihipi
    blok ~ http://www.tagarga.com/blok

    Comment

    Working...