Tags uit string halen
Ok, hier komt het, ik ben bezig met een template parser, maar nou kan het ene template andere tags bevatten dan de andere.
Ik wil de template scannen op tags, en vervolgens de tags in een array opslaan.
Ik heb zelf al vanalles geprobeerd, maar ik probeer deze functie in een loop te krijgen, zodat ie door blijft zoeken, tot alle tags gevonden zijn, en in het voorbeeld hierboven het resultaat dus tot array("test1","test2","test3") te krijgen..
Iemand enig idee?
Ik wil de template scannen op tags, en vervolgens de tags in een array opslaan.
Quote:
function GetBetween($content,$start,$end){
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '';
}
$text = "Blahblah dit is {test1} maar er is meer {test2} want ook een {test3}...";
echo GetBetween($text,"{","}");
$r = explode($start, $content);
if (isset($r[1])){
$r = explode($end, $r[1]);
return $r[0];
}
return '';
}
$text = "Blahblah dit is {test1} maar er is meer {test2} want ook een {test3}...";
echo GetBetween($text,"{","}");
Ik heb zelf al vanalles geprobeerd, maar ik probeer deze functie in een loop te krijgen, zodat ie door blijft zoeken, tot alle tags gevonden zijn, en in het voorbeeld hierboven het resultaat dus tot array("test1","test2","test3") te krijgen..
Iemand enig idee?
kijk eens naar preg_match(_all) op php.net. Die zet het automatisch voor je in een array en daarbij is de validatie ook veel beter dan iets kloten met start en end
Jaron T op 07/12/2012 19:58:28:
kijk eens naar preg_match(_all) op php.net. Die zet het automatisch voor je in een array en daarbij is de validatie ook veel beter dan iets kloten met start en end
Quote:
preg_match_all("/{(.*)}/", $text, $out, PREG_SET_ORDER);
var_dump($out);
var_dump($out);
Dit ziet er al beter uit, alleen ben niet zo goed met de replace patterns, en kan het ook niet zo vinden.
Gewijzigd op 07/12/2012 21:08:50 door Dennis WhoCares
Het kan zelfs ook met preg_replace:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$patterns = array('^\{test1\}^','^\{test2\}^','^\{test3\}^');
$replacements = array('waarde1', 'waarde2', 'waarde3');
$iets = 'Dit is de waarde van test1: {test1}<br>
Dit is de waarde van test2: {test2}<br>
Dit is de waarde van test3: {test3}<br>';
echo preg_replace($patterns, $replacements, $iets);
?>
$patterns = array('^\{test1\}^','^\{test2\}^','^\{test3\}^');
$replacements = array('waarde1', 'waarde2', 'waarde3');
$iets = 'Dit is de waarde van test1: {test1}<br>
Dit is de waarde van test2: {test2}<br>
Dit is de waarde van test3: {test3}<br>';
echo preg_replace($patterns, $replacements, $iets);
?>
Gewijzigd op 07/12/2012 20:16:28 door Ger van Steenderen
Beste Ger van Steenderen,
Dit gebruik ik al voor mijn hoofdzakelijke tags, o.a site titel, meta tags, pagina titel, pagina inhoud.
Na deze tags vervangen te hebben, blijven er nog buitenstaande tags over.
Ik wil deze tags die nog overblijven in een array stoppen. Zodat ik deze vanuit een functie met een switch case opnieuw kan defineren, zodat er geen onnodige classes worden aangeroepen, mochten de tags toch niet voorkomen.
Dus ik wil ze nog niet vervangen, maar eerst opslaan in een array
Dit gebruik ik al voor mijn hoofdzakelijke tags, o.a site titel, meta tags, pagina titel, pagina inhoud.
Na deze tags vervangen te hebben, blijven er nog buitenstaande tags over.
Ik wil deze tags die nog overblijven in een array stoppen. Zodat ik deze vanuit een functie met een switch case opnieuw kan defineren, zodat er geen onnodige classes worden aangeroepen, mochten de tags toch niet voorkomen.
Dus ik wil ze nog niet vervangen, maar eerst opslaan in een array
Gewijzigd op 07/12/2012 20:28:29 door Dennis WhoCares
Ik weet de gehele situatie niet, maar denk je dat je daar veel tijd mee wint?
Ger van Steenderen op 07/12/2012 20:33:31:
Ik weet de gehele situatie niet, maar denk je dat je daar veel tijd mee wint?
Stel: ik heb een reeks tags. Het zij in mijn geval, {guestbook},{news},{members}
Deze staan in een klein vakje in de content verwerkt.
Maar andere pagina's hoeven deze niet te bevatten. Maar op de manier dat ik nu gebruik, gaat het script wel de classes maken en de output genereren.
Dit wil ik dus niet. Ik wil alleen deze classes maken en output genereren wanneer deze in de pagina staan. Anders blijft het achterwege.
Ik kan het niet goed uitleggen, het gene wat ik precies wil staat in de bovenste post.
Een array of een string met de gevonden resultaten uit de $text. in dit geval {test1},{test2},{test3}
Misschien weet iemand hoe het werkt met de patterns, om na de eerste resultaat deze over te slaan, want momenteel met de preg_match_all, slaat hij de complete text op in de array. Ik heb alleen de gevonden tag nodig
Toevoeging op 07/12/2012 21:29:11:
eind resultaat:
Dank u, Jaron T
Code (php)
1
2
3
4
5
6
2
3
4
5
6
preg_match_all("'{(.*?)}'", $text, $out, PREG_PATTERN_ORDER);
foreach($out[0] as $tag)
{
echo $tag . "<br>";
}
foreach($out[0] as $tag)
{
echo $tag . "<br>";
}
Gewijzigd op 07/12/2012 21:19:16 door Dennis WhoCares




