ntan
ntan

Reputation: 2205

Highlight search resuls with string part

i am using the code below to highlight the search results:

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

and its working fine.

But the preg_replace return the whole string and highlight the words that match.

I need to get a part of the string and only the whole string.

A scenario is to get 100 chars before and 100 chars after the first match. Any help will be appreciated.

Upvotes: 6

Views: 1965

Answers (1)

jmlsteele
jmlsteele

Reputation: 1239

If you want 100 characters before and after then just change your regex from/\b($word)\b/i to /^.*?(.{0,100})\b($word)\b(.{0,100}).*?$/i

Then change your replacement to \1<span class="highlight_word">\2</span>\3

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

Edit: Updated after poster comment. That should do what you want.

Edit2: The regex would fail if there weren't 100 characters on either side. This one will work regardless of whether there are 100 characters before/after the word now. If there are less than 100 characters it will match them all.

Edit3: Updated answer after poster comment.

Upvotes: 8

Related Questions