2011-10-05 8 views
6

sto usando il codice qui sotto per evidenziare i risultati della ricerca:resuls ricerca Evidenziare con stringa parte

$text = preg_replace("/\b($word)\b/i", '<span class="highlight_word">\1</span>', $text); 

e il suo funzionamento benissimo.

Ma il preg_replace restituisce l'intera stringa ed evidenzia le parole corrispondenti.

Ho bisogno di ottenere una parte della stringa e solo l'intera stringa.

Uno scenario è ottenere 100 caratteri prima e 100 caratteri dopo la prima corrispondenza. Qualsiasi aiuto sarà apprezzato.

risposta

8

se volete 100 caratteri prima e dopo allora basta cambiare la tua regex da /\b($word)\b/i a /^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i

Quindi modificare il tuo sostituzione \1<span class="highlight_word">\2</span>\3

E tutto: $text = preg_replace("/^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i", '\1<span class="highlight_word">\2</span>\3', $text);

Modifica: Aggiornato dopo manifesto commento. Quello dovrebbe fare quello che vuoi.

Edit2: L'espressione regolare non avrebbe esito positivo se non ci fossero 100 caratteri su entrambi i lati. Questo funzionerà indipendentemente dal fatto che ci siano 100 caratteri prima/dopo la parola ora. Se ci sono meno di 100 caratteri, li abbinerà tutti.

Modifica3: risposta aggiornata dopo il commento del poster.

+0

Con questa modifica evidenzia tutta la stringa ma voglio evidenziare solo la parola $ e avere 100 prima e dopo ma non evidenziata.Grazie per la tua risposta – ntan

+0

Risposta originale aggiornata per adattarsi meglio a ciò che volevi. – jmlsteele

+0

Evidenzia solo la parola $ ma restituisce l'intero testo.Non restituisce 100 prima e dopo.Io cambio anche in {0,1} per vedere cosa succede ma restituisce ancora l'intero $ testo – ntan

Problemi correlati