---
title: "markera sökord i sträng - preg_replace"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/177879-markera-sökord-i-sträng-preg-replace"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2009-04-05T20:02:32.000Z"
updated: "2009-04-06T11:48:17.000Z"
replies: 3
views: 490
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/177879-markera-sökord-i-sträng-preg-replace"
---

# markera sökord i sträng - preg_replace

## #1 — learn, 2009-04-05T20:02Z

Jag har en sträng som kan se ut enligt följande:

```php
$str = "<a href='test.php'>Jag är en sträng</a>"
```

Nu vill jag markera det som postas i ett formulär, t.ex:

```php
$_POST['search'] = "sträng"
```

Så att strängen blir som följande:

```php
$str = "<a href='test.php'>Jag är en <span>sträng</span></a>"
```

"Sökordet" kan förekomma flera gånger i strängen.

Hur gör jag?

Tack.

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

## #2 — voigtann1, 2009-04-05T21:05Z

```
$str = preg_replace('/('.$_POST['search'].')/imx', '<span>$1</span>', $str);
```

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

## #3 — learn, 2009-04-05T21:13Z

Ah förlåt, jag glömde klargöra en viktig detalj...  Sökordet får inte markeras inuti html taggar för då blir det ju knas...

Exempel:

```php
$str = "<a href='test.php'>Jag är ett test</a>";

$_POST['search'] = "test";

$new_str = preg_replace('/('.$_POST['search'].')/imx', '<span>$1</span>', $str);;
```

Skulle ju i så fall bli:

```php
$new_str = "<a href='<span>test</span>.php'>Jag är ett <span>test</span></a>"
```

....!

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

## #4 — learn, 2009-04-06T11:48Z

Jag byggde en funktion  :)

```php
// Tar emot ett sökord (str) och en sträng (str) att söka i
// Returnerar strängen där sökordet är markerat med <span>
// Funktionen tar hänsyn till HTML taggar (ev. markering görs ej inuti dessa)
function mark_string($search, $str)
{
	// Den nya strängen
	$new_str = "";
			
	// HTML tags pattern
	$pattern = "/([\<][\/]?[a|span|p|div|br|input|form].*?[ ]?[\/]?[\>])/";
			
	// Hitta alla HTML taggar och spara dem i arrayen $matches
	preg_match_all($pattern, $str, $matches);
			
	// Dela upp innehåll som inte är inuti i en HTML tag
	$content_arr = preg_split($pattern, $str);
				
	// Gå igenom alla delar
	foreach ($content_arr as $content)
	{
		// Markera alla förekomster av sökordet
		$new_str .= preg_replace("/($search)/i", "<span>$1</span>", $content);
				
		// Lägg till HTML tag
		$new_str .= current($matches[1]);	
				
		// Nästa HTML tag
		next($matches[1]);
	}
		
	// Returnera den nya strängen
	return $new_str;
}
```

In action:

```php
$str = "Ordet html i en <a href='html.php'>html tag</a> funkar bra!";

$search = "html";

echo mark_string($search, $str);
// Ordet <span>html</span> i en <a href="html.php"><span>html</span> tag</> funkar bra!
```

Rätt stolt att jag lyckats, för det fungerar precis så som jag vill.

Men, den går säkert att optimera, kanske rent ut av det går att göra en preg_replace som gör allt detta med en gång?

Tacksam för synpunkter och tips.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/177879-markera-sökord-i-sträng-preg-replace
