---
title: "Hjälp med REGEXP-uttryck"
type: "forum-thread"
url: "https://www.webforum.nu/amne/webbutveckling/131627-hjälp-med-regexp-uttryck"
topic: "Webbutveckling"
topic_url: "https://www.webforum.nu/amne/webbutveckling"
author: "lillebror"
published: "2005-07-20T06:49:41.000Z"
updated: "2005-09-26T13:44:04.000Z"
replies: 34
views: 1530
page: 1
pages: 2
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/webbutveckling/131627-hjälp-med-regexp-uttryck"
---

# Hjälp med REGEXP-uttryck

_Sida 1 av 2._

## #1 — lillebror, 2005-07-20T06:49Z

Hej!

Behöver lite hjälp med ett uttryck då jag själv inte är en mästare på detta!

Koden som jag vill ska detekteras är följande:

```
VÄNSTERKLAMMERCITAT=username]Text Text[/CITATHÖGERKLAMMER
```

Denna kod vill jag ska ersättas med:

```
<table style="margin-left: 10px;">
<tr>
<td>Username skrev:<br /><hr>Text Text<br /><hr></td>
</tr>
</table>
```

Några idéer? :)

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

## #2 — Matte, 2005-07-20T07:05Z

Testa med

```
$pattern = "/\[citat=([^\]]+)](.*?)\[\/citat]/is";

$replace = "
  <table style=\"margin-left: 10px;\">
  <tr>
  <td>$1 skrev:<br /><hr>$2<br /><hr></td>
  </tr>
  </table>
";

$text = preg_replace($pattern, $replace, $text);
```

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

## #3 — Erik Juhlin, 2005-07-20T07:31Z

Pattern:

```
\[citat\=([^\]]+)]([\s\S]+?)\[\/citat\]
```

Byt ut mot:

```
<table style="margin-left: 10px;">
<tr>
<td>$1 skrev:<br /><hr>$2<br /><hr></td>
</tr>
</table>
```

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

## #4 — Erik Juhlin, 2005-07-20T07:33Z

Äsch, så här blir det när man får samtal mitt i inläggsskrivandet. Mattes kod är bra med jag skulle vilja byta ut (.\*?) mot (\[\\s\\S\]+?).
Då klarar den även av radbrytningar i citatet. :)

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

## #5 — Matte, 2005-07-20T07:37Z

Modifikatorn /s fixar så att den tar med radbrytningar också :)

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

## #6 — Erik Juhlin, 2005-07-20T07:57Z

Ok!

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

## #7 — lillebror, 2005-07-20T13:26Z

Matte, som vanligt kom du med en strålande och fungerande lösning :) Erik, tack för dina tips också!

Citat-funktionen blev väldigt lik den som finns här på wF. Dock löser inte regexp-uttrycket ut att hantera en citering av ett redan citerat inlägg? Ett citat i citatet alltså! Hur kan man lösa detta med regexp? :OO

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

## #8 — Matte, 2005-07-20T16:34Z

Då får du ersätta starttagg resp sluttagg var för sig.

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

## #9 — lillebror, 2005-07-20T17:44Z

> **Matte skrev:**
>
> Då får du ersätta starttagg resp sluttagg var för sig.

Öh va?  :q Hur menar du?

Kan man inte använda preg_replace och få funktionen att applicera min replace-del på alla förekomster av den angivna pattern? Talar jag i tungor nu eller var det där begripligt det jag skrev?  :e

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

## #10 — Matte, 2005-07-20T17:58Z

Grejen är att man inte vet om det är en eller flera citat inom ett citat, eller om det är flera nivåer. Ej heller vet man om det kan finnas flera citat som inte ligger i varandra.
Det är m.a.o. väldigt svårt att hitta vilken  som hör ihop med 

> .
> 
> Därför måste du då ta din citat och /citat var för sig, om du vill kunna ha citat inom citat.

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

## #11 — lillebror, 2005-07-20T18:16Z

Alltså köra funktion fler gånger efter varann?

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

## #12 — Matte, 2005-07-20T18:26Z

Snarare något i stil med:

```
$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");

$replace[] = "
  <table style=\"margin-left: 10px;\">
  <tr>
  <td>$1 skrev:<br /><hr>
";
$replace[] = "
  <br /><hr></td>
  </tr>
  </table>
";

$text = preg_replace($pattern, $replace, $text);
```

 
Men varför använda en \<table\> när du bara har en cell ?
Varför inte istället använda en \<div\> eller något ?

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

## #13 — Niklasson, 2005-07-21T08:36Z

Tråden flyttas från PHP..

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

## #14 — lillebror, 2005-08-07T18:22Z

> **Matte skrev:**
>
> Snarare något i stil med:
>
>
> ```
> $pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");
> 
> $replace[] = "
>   <table style=\"margin-left: 10px;\">
>   <tr>
>   <td>$1 skrev:<br /><hr>
> ";
> $replace[] = "
>   <br /><hr></td>
>   </tr>
>   </table>
> ";
> $text = preg_replace($pattern, $replace, $text);
> ```

Fortsätter på denna tråd då jag inte haft tid att åtgärda problemet med citat i citaten förrän nu. Så den kod som är ovan, är den uppbyggd för att klara av just detta fenomen? Ser att $pattern innehåller en array men kan inte riktigt tolka vad som händer i själva uttrycket med de två replace-uttrycken som kommer lite längre ner.  :)

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

## #15 — Matte, 2005-08-07T19:07Z

Det första mönstret ($pattern) ersätts med det första $replace, det andra mönstret med den andra replace.

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

## #16 — lillebror, 2005-08-07T21:33Z

När jag implementerad ovanstående kod får jag följande felmeddelande:

```
[B]Fatal error:[/B] [] operator not supported for strings in
sökväg c:\xxx\fil.php on line 117
```

Vad kan vara fel?

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

## #17 — Matte, 2005-08-07T22:57Z

När jag testar det fungerar det alldeles utmärkt.

Hur ser din kod ut ?

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

## #18 — lillebror, 2005-08-08T09:31Z

Koden ser ut så här:

```
$pattern = array("/\[citat=([^\]]+)]/is", "/\[\/citat]/is");
$replace[] = "<table style=\"margin-left:10px;\"><tr><td>$1 skrev:<br /><hr>";
$replace[] = "<br /><hr></td></tr></table>";

$reply['content'] = preg_replace($pattern, $replace, $reply['content']);
echo  nl2br($reply['content']); ?>
```

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

## #19 — Matte, 2005-08-08T18:27Z

Fungerar hur bra som helst när jag testar.

Har du några konstigheter med arryen $reply ?
Vad får du om du kör print_r() på den, före din replace ?

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

## #20 — lillebror, 2005-08-09T10:05Z

> **Matte skrev:**
>
> Vad får du om du kör print_r() på den, före din replace ?

Följande information skrivs ut från ett testinlägg som jag gjorde med dubbla citat:

```
[CITAT=Fredrik][CITAT=Fredrik]Test[/CITAT] Test igen...[/CITAT] Ännu ett test...
```

Nu kan jag ju inte skriva ut det så att det blir rätt utan wF tolkar det precis så som jag vill att mitt ska bli tolkat  :e 

Jag vet inte vad jag gjorde eller inte gjorde men vips så fungerade allting galant. haha. Så märkligt det kan vara ibland :)

Bifogar en bild med resultatet. Tack för hjälpen än en gång! :e

P.S. Är det smidigare att använda en div istället för en table? Du skrev något om det tidigare.

Bilagor:

- [citat.jpg](https://www.webforum.nu/a/7259.jpg)

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

---

Tråden på webben: https://www.webforum.nu/amne/webbutveckling/131627-hjälp-med-regexp-uttryck  
Nästa sida: https://www.webforum.nu/amne/webbutveckling/131627-hjälp-med-regexp-uttryck/page2.md
