---
title: "Ta bort tomma taggar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/147609-ta-bort-tomma-taggar"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2006-06-01T12:53:24.000Z"
updated: "2006-10-21T00:59:38.000Z"
replies: 14
views: 991
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/147609-ta-bort-tomma-taggar"
---

# Ta bort tomma taggar

## #1 — learn, 2006-06-01T12:53Z

Jag vill ta bort alla tomma taggar från en sträng. En tom sträng kan tex vara \<p\>\</p\> men även \<p\>\<br\>\</p\> eller \<p\> \</p\> etc.

Hur kan jag göra?

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

## #2 — nitro2k01, 2006-06-01T13:18Z

```php
$text = preg_replace('/<(p|span|div)>(\s+|<br\s*\/*>)*<\/(p|span|div)>/i', '', $text);
```

/r Postade för snabbt.

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

## #3 — learn, 2006-06-01T13:29Z

Tack!

Vilka tecken räknas som "inget innehåll" i ditt exempel?

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

## #4 — nitro2k01, 2006-06-01T14:44Z

Och, dags att bryta ner uttrycket lite grann:
**(\\s+\|\<br\\s\*\\/\*\>)\*** innebär att **(\\s+\|\<br\\s\*\\/\*\>)** matchas noll eller flera gånger. 
**(\\s+\|\<br\\s\*\\/\*\>)** betyder **\\s+** eller **\<br\\s\*\\/\*\>**
**\\s+** betyder ett eller flera blanksteg. **\<br\\s\*\\/\*\>** betyder \<br\>, eventuellt med mellanrum eller / i taggen. (**\\/\*** bör vara **\\/?** kom jag på nu. :) )

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

## #5 — learn, 2006-06-01T15:58Z

Tack  :bire  

Alltså: $text = preg_replace('/\<(p\|span\|div)\>(\\s+\|\<br\\s\*\\/?\>)\*\<\\/(p\|span\|div)\>/i', '', $text);

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

## #6 — learn, 2006-06-02T08:22Z

Om jag även vill ta bort alla \<br\> i slutet av strängen, hur gör jag?

Alltså om strängen tex ser ut så här: "\<p\>Hej hej hej hej hej\<br\>hejhejhej\<br\>\</p\>" så ska den andra \<br\>:en tas bort. Kort sagt, kommer det inget text-innehåll efter en \<br\> så ska den tas bort.

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

## #7 — nitro2k01, 2006-06-02T08:35Z

Otestat, men jag tror att det ska funka:

```php
$text = preg_replace('/(\s+|<br\s*\/?>)*<\/(p|span|div)>/i', '<\/{$2}>', $text);
```

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

## #8 — learn, 2006-06-02T08:51Z

Nja, det funkar inte riktigt...

Testade:

```php
<? $text = '<p>sasda<br><br></p>' ?>
<input type="text" size="20" value="<?=preg_replace('/(\s+|<br\s*\/?>)*<\/(p|span|div)>/i', '<\/{$2}>', $text)?>" />
```

Fältet får detta värde: 

> **fält skrev:**
>
> \<p\>sasda\<\\/{p}\>

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

## #9 — learn, 2006-06-02T09:38Z

Detta funkar:

```php
preg_replace('/(<br\s*\/?>)*<\/(p|span|div)>/i', '</$2>', $text)
```

Men nu vill jag att det inte skall behöva vara en omslutande tagg. Dvs så ska \<br\> även tas bort i följande: "hejhejhej\<br\>hejhejhej\<br\>" (ska bli "hejhejhej\<br\>hejhejhej").

Hur göra?

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

## #10 — learn, 2006-06-02T11:25Z

Min **preg_replace** skall alltså inte göra ngn skillnad på om \<br\> är omsluten med \<p\>/\<span\>/\<div\> eller ej. Dessutom ska mellanslag inte räknas som innehåll i detta fall.

Hur ska jag göra? :)

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

## #11 — learn, 2006-10-09T14:40Z

Nu vill jag även att tomma taggar med "style" skall tas bort.

Exempel:

```
hej hej hej hej hej<div style="font-size:11px; font-weight:bold"><br></div>hej hej hej hej
```

Ska bli:

```
hej hej hej hej hej hej hej hej hej
```

Det här är vad jag själv kommit fram till m.h.a. den hjälp jag tidigare fått av nitro2k01:

```php
$text = preg_replace('/<(p|span|div)( style\=\"[^"])>(\s+|<br\s*\/*>)*<\/(p|span|div)>/i', '', $text);
```

Inte helt rätt, jag vet...

Hur gör man?

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

## #12 — learn, 2006-10-10T11:14Z

Ingen som vet...?

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

## #13 — Peter S, 2006-10-10T12:44Z

```php
$text = preg_replace('/<(p|span|div)(?: style="[^"]*")?>(?:\s|<br(\s*\/)?>)*<\/\\1>/i', '', $text);
```

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

## #14 — learn, 2006-10-11T10:08Z

> **Peter S skrev:**
>
> ```php
> $text = preg_replace('/<(p|span|div)(?: style="[^"]*")?>(?:\s|<br(\s*\/)?>)*<\/\\1>/i', '', $text);
> ```

Verkar funka bra, tack Peter!

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

## #15 — salkciN, 2006-10-21T00:59Z

> **learn skrev:**
>
> Men nu vill jag att det inte skall behöva vara en omslutande tagg. Dvs så ska \<br\> även tas bort i följande: "hejhejhej\<br\>hejhejhej\<br\>" (ska bli "hejhejhej\<br\>hejhejhej").
> 
> Hur göra?

Prova något i stil med:

```php
$text = preg_replace('/<(p|span|div|)( style.*)?>(\s+|<br\s*\/?>)*<\/(p|span|div|)>|<br\s*\/?>$/i', '', $text);
```

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

---

Tråden på webben: https://www.webforum.nu/amne/php/147609-ta-bort-tomma-taggar
