Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Aiuto espressione regolare - evidenziare più parole in un testo

    Salve ragazzi,
    sto facendo uno script per effettuare la ricerca di una (o più) parole in un database. Lo script e le query funzionano a dovere, l'ultima parte che mi "manca" è evidenziare le parole cercate..

    Per ora ho utilizzato una semplice espressione regolare:
    codice:
    $n_words_search = explode(" ", $cerca_prodotto);
    if(@count($n_words_search)>0){
      for($w=0; $w<count($n_words_search); $w++){
        $highlight = $n_words_search[$w];
        $titolo_evidenziato = preg_replace('/('. $highlight . ')/i', '<span class="highlight">$1</span>', $titolo);
        $new_desc = preg_replace('/('. $highlight . ')/i', '<span class="highlight">$1</span>', $new_desc);
      }
    }else{
      $titolo_evidenziato = preg_replace('/('. $cerca_prodotto . ')/i', '<span class="highlight">$1</span>', $titolo);
      $new_desc = preg_replace('/('. $cerca_prodotto . ')/i', '<span class="highlight">$1</span>', $new_desc);
    }
    in "$cerca_prodotto" è contenuta la mia chiave di ricerca, quello che faccio è semplicemente: scomporla per il carattere "spazio" e cercare ogni parola nel mio "titolo" e "descrizione".

    Questo script ha un problema pero, se io cercassi "prodotto1 a" con questo script la mia chiave viene scomposta in "prodotto1" e "a", ora immaginate che io abbia un record che al campo Titolo si ritrova "prodotto1 abc", il mio script al primo giro mi evidenzia la parola "prodotto1" al secondo giro dovrebbe evidenziare la lettera "a" il problema però è che mi evidenzia tutte le A anche nella scritta "<span class="highlight">....</a>" che ha aggiunto al giro prima!! quindi mi ritrovo uno span nello span non so se mi spiego

    Quello che mi chiedo quindi è:
    esiste un modo per dire alla mia espressione regolare "se trovi la scritta <span class="highlight"> o la scritta </span> allora non fare nulla e passa oltre"??

  2. #2
    Ho trovato la soluzione!
    Piuttosto che fargli capire "non cercare questa stringa", con il ciclo FOR ho accumulato tutte le parole "chiave" da evidenziare e poi ho fatto un unico preg_replace (: posto lo script
    codice:
    if(@count($n_words_search)>0){
    	for($w=0; $w<count($n_words_search); $w++){
    		if($w==0){
    			$highlight = "(" . $n_words_search[$w] . ")";
    }else{
    	$highlight .= "|(" . $n_words_search[$w]. ")";
    	}
    }
    $titolo_evidenziato = preg_replace('/('. $highlight . ')/i', '<span class="highlight">$1</span>', $titolo);
    $new_desc = preg_replace('/('. $highlight . ')/i', '<span class="highlight">$1</span>', $new_desc);
    }else{
    	$titolo_evidenziato = preg_replace('/('. $cerca_prodotto . ')/i', '<span class="highlight">$1</span>', $titolo);
    $new_desc = preg_replace('/('. $cerca_prodotto . ')/i', '<span class="highlight">$1</span>', $new_desc);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.