---
title: "regexp problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/111267-regexp-problem"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Qonos"
published: "2004-09-10T06:44:17.000Z"
updated: "2004-09-11T20:13:00.000Z"
replies: 6
views: 228
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/111267-regexp-problem"
---

# regexp problem

## #1 — Qonos, 2004-09-10T06:44Z

```php
function textFormat($text,$page = "presentation",$admin = 0)
{

		$pattern = array (
		"/\[quote](.*?)\[\/quote]/is",
		"/\[quote=(.*?)](.*?)\[\/quote]/is",
		);
	
		$replace = array 
		(
		   "<div class=\"h5\"><i>".$GLOBALS["strQuote"]."</i>:<br><hr>$1<hr><br></div>",
		   "<div class=\"h5\"><i>$1 ".$GLOBALS["strWrote"]."</i>:<br><hr>$2<hr><br></div>",

		);

	$text = preg_replace($pattern, $replace, $text);
	$text = nl2br(stripslashes($text));
	return $text;
}
```

denna funktionen fungerar bra om man skriver

```php
[quote]hej[/quote]
```

men om någon citerar ett inlägg som innehåller ett citat typ:

```php
[quote][quote]hej[/quote]ojoj[/quote]
```

så använder den den första 

> och den första

 och följden blir då att de två andra ignoreras.

finns det nått sätt att komma förbi detta?

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

## #2 — Qonos, 2004-09-10T06:45Z

Oj det såg ju inte riktigt rätt ut, bifogar inlägget ovan som txt-fil, så ni ser vad jag egentligen skrev :)

Bilagor:

- [textformat.txt](https://www.webforum.nu/a/4522.txt)

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

## #3 — Qonos, 2004-09-10T18:45Z

hmm kanske inte är regexp som det gäller, eller?
kanske är det så att man på något sätt måste läsa strängen från båda hållen och matcha hop taggarna på det sättet, eller?

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

## #4 — Eitraz, 2004-09-10T18:54Z

Jag brukar köra en "fuling" och skilja på **\[ quote\]** och **\[ /quote\]** så att de inte ligger i samma regexp (alt relpace) så slipper man det där problemet ;)

Finns väll säkert nåt annat lurigt sett man kan göra nestat med, men jag kan ingen för tillfället ;)

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

## #5 — Qonos, 2004-09-11T09:35Z

jo det skulle ju fungera, men om de har t.ex. 3st \[ quote\] och 2st \[ /quote\].

kommer inte det att kunna fucka up hela layouten på resten av sidan?

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

## #6 — Matte, 2004-09-11T10:40Z

Du skulle kunna göra en funktion som kollar dina *quote* utifrån in:

```php
function replace_quote($by, $text) {

   $text = preg_replace("/\\[quote(=([^\\]]*))*](.*)\\[\\/quote]/ise", "replace_quote('$2', '$3')", $text);

   return "\n<div class=\"h5\"><i>$by ".$GLOBALS['strWrote']."</i>:<br><hr>$text<hr><br></div>\n";

}

$text = preg_replace("/\\[quote(=([^\\]]*))*](.*)\\[\\/quote]/ise", "replace_quote('$2', '$3')", $text);
```

Men då faller detta på att det inte skulle fungera om du hade t.ex.:

```php
[quote]hopp[/quote]hej[quote]ojoj[/quote]
```

Kanske det då skulle kunna gå att göra ett avancerat uttryck som fixar också det,
men jag tror det bästa isåfall är att göra som Eitraz föreslog, för att sedan räkna
\<div\> och \</div\> i din text och utifrån detta antingen lägga till ett antal \<div\> i 
början eller \</div\> i slutet.

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

## #7 — aasah, 2004-09-11T20:13Z

...

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

---

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