Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sisäkkäiset kommentit preg_replacella

peki [17.10.2004 18:54:39]

#

Olen tässä tekemässä omaa keskustelualuetta.
Kaikki on menny tähän asti hyvin. Nyt olen kuitenkin törmännyt erääseen ongelmaan lainauksien kanssa.
Ongelma koskee sisäkkäisiä lainauksia.

Käytän tällaista koodia:

<?php
$teksti = 'alkutekstiä [lainaus "Seppo"]sepi kirjoitti tämän [lainauS "Keijo"]keijo kirjoitti tämän[/lainaus] välitekstiä [/lainaus] lopputekstiä';
$teksti = preg_replace('/(.*)(\[lainaus "?)(.+)("\]?)(.*)(\[\/lainaus\]?)/', '$1<i><small>$3 kirjoitti:</small></i><div id="lainaus">$5</div>', $teksti);
?>

Tämä toimii täydellisesti yhdellä lainauksella, mutta sisäkkäisten kanssa tilanne muuttuu. Kyseinen preg pätkä aloittaa lainaamisen toisesta lainaus tagista ja lopettaa sen viimeiseen lainauksen lopetustagiin.

Osaisiko joku neuvoa oikean ratkaisun preg_replacella käyttämättä ns. "purkkaratkaisuja" eli str_replacea, substr:ia ja muita tällaisia funktioita?

folio [17.10.2004 19:04:54]

#

Omassa foorumissani on seuraavanlainen systeemi:

$quote_pattern = "%\[quote=(.*?)\](<br />)*(.*?)\[/quote\](<br />)*%is";
$quote_replace = "<div class=\"quote\">\\1 wrote:</div><div class=\"quote_text\">\\3</div>";

while( preg_match($quote_pattern, $input) )
{
  $input = preg_replace($quote_pattern,  $quote_replace,  $input);
}

Jos et osaa soveltaa niin kysy ihmeessä lisää.

peki [17.10.2004 19:33:50]

#

Kiitos! Sain toimimaan.
Tällä tavalla sen tein. En kyllä osaa tuota regexiä riittävästi, jotta tajuaisin toimintaperiaatteen täysin. Soveltamiseen taitoni kuitenkin riittivät.

<?php
	$lainaus_pattern = "%\[lainaus \"(.*?)\"\](.*?)\[/lainaus\]%is";
	$lainaus_replace = '<small>$1 kirjoitti:</small></i><div id="lainaus">$2</div>';

	while( preg_match($lainaus_pattern, $teksti) )
	{
		$teksti = preg_replace($lainaus_pattern,  $lainaus_replace,  $teksti);
	}
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta