---
title: "Regexp och markering av sökträffar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/47059-regexp-och-markering-av-sökträffar"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Web-Tor"
published: "2002-07-02T12:06:35.000Z"
updated: "2003-08-13T10:12:19.000Z"
replies: 8
views: 646
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/47059-regexp-och-markering-av-sökträffar"
---

# Regexp och markering av sökträffar

## #1 — Web-Tor, 2002-07-02T12:06Z

Jag använder den här koden för att markera sökträffar på sida:

```php
<?
function highlight ($str, $Search){ 
	if (isset($Search))
		$str = preg_replace ( "/(.*?)(" . $Search . ")(.*?)/is", "\\1<b>\\2</b>\\3", $str ); 
	return $str; 
}

?>

<?=highlight($row[0], $Search)?>
```

Men det uppstår ett litet fel. Om texten som söks igenom ser ut så här:

En massa text \<span class="text"\>står här\<span\>

Söker jag på 'text' så kommer ju källkoden se ut så här efter att sökordet markerats:

En massa \<b\>text\</b\> \<span class="\<b\>text\</b\>"\>står här\<span\>

Och det blir ju inte så bra. Alltså:
Hur utesluter jag taggar ur min "highlight-funktion"???

Permalänk: https://www.webforum.nu/p/47059

## #2 — SPiN, 2002-07-02T12:29Z

Pröva:

```
$str = preg_replace( "'<(.*?)>(" . $Search . ")</(.*?)>'is", "<b>\\2</b>", $str );
```

Se bara till så att användare inte kan använda \< och \> i sina texter.

Permalänk: https://www.webforum.nu/p/712188

## #3 — Web-Tor, 2002-07-02T12:35Z

Nja... Det funkar inte. Ingenting markeras :q

Permalänk: https://www.webforum.nu/p/712192

## #4 — U2K, 2002-07-04T20:50Z

Detta var precis vad jag letat efter Web-Tor.. Synd att det inte fungerar bara.. 
När jag kör det så blir det bara knas tyvärr.

ex: 

 

```
 $str = "Detta är text" 
 $search = "text"
 
 detta ger....

 $str = "Detta är en []"
```

Ser ingen som helst logik bakom detta men det kanske beror på att jag är kass på regexp också. Någon som har en lösning på detta. Det skulle underlätta.

Permalänk: https://www.webforum.nu/p/713293

## #5 — nicclas, 2002-07-06T14:39Z

Så här:

\<?
function highlight ($str, $Search){ 
    if (isset($Search))
        $str = preg_replace ( "/(\<.\*?\>\|)(\[^\<^\>\]\*?)(".$Search.")(\[^\<^\]\*?)(\<.\*?\>\|\[^\<^\>\]\*?\>)/mis", "\\\\1\\\\2\<b\>\\\\3\</b\>\\\\4\\\\5", $str ); 
    return $str; 
}

$str="En massa text \<span class=\\"text\\"\>\\nstår här\<span\>";
$Search="text";
echo highlight($str, $Search);
?\>

tror jag att det skall fungera. Prova!

PS Det är inte så bra att lagra HTML:en i "databasen", det hade blivit mycket enklare som du lagrat texten för sig och HTML-koden för sig.... DS

/nicclas - <https://www.frisim.com>

Permalänk: https://www.webforum.nu/p/714124

## #6 — Web-Tor, 2002-07-29T08:59Z

Nu är jag tebaka från semestern och får ta tag i det här igen:
Din kod funkar inte till 100% Nicclas

Sättar man $str så här så blir det fortfarande fel:

```php
$str="<p><img src=\"bild.gif\" alt=\"En bild med text på\"></p>";
```

Här kommer ordet 'text' i alt-texten att få \<b\>-taggar runt sig. :l

Det blir alltså fel när en tagg ligger i en annan utan att det finns några tecken mellan taggarna. Fattar ni?

Permalänk: https://www.webforum.nu/p/732522

## #7 — nicclas, 2002-07-30T13:13Z

Oj lite slarvigt, jag missade ett \>-tecken där mitt i :)

Prova med detta:
\<?
function highlight ($str, $Search){
if (isset($Search))
$str = preg_replace ( "/(\<.\*?\>\|)(\[^\<^\>\]\*?)(".$Search.")(\[^\<^\>\]\*?)(\<.\*?\>\|\[^\<^\>\]\*?\> )/mis", "\\\\1\\\\2\<b\>\\\\3\</b\>\\\\4\\\\5", $str );
return $str;
}

$str="\<p\>\<img src=\\"bild.gif\\" alt=\\"En bild med text p\\"\>\</p\>";
$Search="text";
echo highlight($str, $Search);
?\> 

/nicclas - <https://www.frisim.com>

Permalänk: https://www.webforum.nu/p/736301

## #8 — Web-Tor, 2002-07-30T13:20Z

Du é kung på regexp Nicke! :)

Permalänk: https://www.webforum.nu/p/736305

## #9 — Asterix, 2003-08-13T10:12Z

Vet att tråden är gammal men jag har ett problem med funktionen.

```php
$str = preg_replace ( "/(<.*?>|)([^<^>]*?)( )([^<^>]*?)(<.*?>|[^<^>]*?> )/mis", "\\1\\2<font color=\"#FFFFFF\" class=\"i\">i\\3</font>\\4\\5", $str);
```

För att byta ut alla mellanslag mot i + mellanslag. Självklart ska det inte göras i html-koden eftersom den inte funkar då. Däremot funkar det inte riktigt som den ska. Den ersätter bara vissa mellanslag. Det verkar som det är det första mellanslaget efter \\n\\n.

Permalänk: https://www.webforum.nu/p/1137669

---

Tråden på webben: https://www.webforum.nu/amne/php/47059-regexp-och-markering-av-sökträffar
