webForumDet fria alternativet

regexp problem

PHP

6 svar · 220 visningar · startad av Qonos

Medlem sedan sep. 2000438 inlägg
Frågan#1
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

[quote]hej[/quote]

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

[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?

Medlem sedan sep. 2000438 inlägg
#2

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

Medlem sedan sep. 2000438 inlägg
#3

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?

Medlem sedan sep. 2002366 inlägg
#4

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 ;)

Medlem sedan sep. 2000438 inlägg
#5

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?

Medlem sedan aug. 20002 975 inlägg
#6

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

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.:

[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.

Medlem sedan mars 20034 471 inlägg
#7

...

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)