---
title: "REGEXP problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/15111-regexp-problem"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "schutzer"
published: "2001-01-05T19:19:00.000Z"
updated: "2001-01-08T10:23:00.000Z"
replies: 6
views: 149
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/15111-regexp-problem"
---

# REGEXP problem

## #1 — schutzer, 2001-01-05T19:19Z

Jag tänkte tillåta att man skriver viss html-kod i gästböker och dylikt. För att ha lite kontroll på det hela så började jag med att koda allt med htmlentities.

Min tanke är att sedan ersätta t.ex. \<B\> med \<B\>. Dessutom vill jag att de avslutar den korrekt. Detta har jag lyckat lösa med följande regexp:

```
$retStr = eregi_replace("<(B)>(.*)</(B)>","<\\1>\\2</\\3>",$retStr);
```

Kanske inte jättesnyggt men det fungerar.

Nu till första frågan: Jag vill ange flera taggar i samma regexp men vill att den ska avslutas korrekt, dvs jag vill att \<B\>text\</B\> och \<I\>text\</I\> ska tillåtas men inte \<B\>text\</I\>.

Detta skulle jag vilja göra ungefär så här men det fungerar inte eftersom \\\\1 bara fungerar i ersättningstexten.

```
$retStr = eregi_replace("<(B&#0124;I)>(.*)</(\\1)>","<\\1>\\2</\\3>",$retStr);
```

Några förslag på hur man löser det.

Nästa problem: Jag vill kunna tillåta \<UL\>\<LI\>Text\</LI\>\<LI\>Text\</LI\>\<UL\>.

Problemet om jag använder ovanstående konstruktion är att \* är glupsk och sväller så mycket som mycket. Resultatet av (.\*) blir därför Text\</LI\>\<LI\>Text istället för bara Text. I Perl skriver man (.\*?) tror jag men det fungerar inte. Det stod någonting om (U?) i manualen men jag fattade inte.

Tacksam för svar.

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

## #2 — schutzer, 2001-01-05T19:22Z

Det blev lite konstigt eftersom webforum tydligen gjorde om & mot & men jag tror ni förstår vad jag menar.

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

## #3 — spango, 2001-01-06T21:35Z

Det första problemet har jag ingen aning om, men däremot det andra. Kolla in <http://www.php.net/manual/ref.pcre.php> 
Jag vet inte om det hjälper men jag tror att det borde göra det. Särskilt [Pattern syntax](http://www.php.net/manual/pcre.pattern.syntax.php).

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

## #4 — schutzer, 2001-01-06T21:42Z

Jag såg att det stod någonting om ungreedy i pattern syntax men jag förstod inte hur jag skulle skriva.

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

## #5 — spango, 2001-01-07T02:32Z

Precis som i Perl, verkar det...

```
preg_replace("/([[i]ett mönster...[/i]]*?)/", "det vi ska byta regexp:en med, med eventuella bakåtreferenser som \\1 och \\2", "den sträng vi ska byta ut saker i");
```

**\\r** Parse error

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

## #6 — schutzer, 2001-01-07T11:08Z

Näpp, så är det inte. Jag försökte så först men det resulterar i 

```
Warning: REG_BADRPT:"repetition-operator operand invalid in include/functions.php on line 310
```

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

## #7 — nanne, 2001-01-08T10:23Z

Om jag har förstått dig rätt så vill du att vissa taggar ska fungera men inte alla?

Isf så skriv bara.

$retStr = strip_tags("\<b\>\<i\>\<ul\>\<li\>",$retStr);

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

---

Tråden på webben: https://www.webforum.nu/amne/php/15111-regexp-problem
