PHP ver gevorderde |
|
Dit bedoel jij zeker? Ik heb uitleg in bij de code gezet. Hopelijk kan je er wat mee .
<?php
// De functie die wordt uitgevoerd bij elke match in de reguliere expressie
function specialTag($sTag, $sInner)
{
// Doe hier wat je maar wilt, ik heb een voorbeeldje gegeven.
$aTrans = array
(
'bold' => 'strong',
'code'=> 'code',
'underline' => 'ins'
);
$sTag = strtr($sTag, $aTrans);
return '<'.$sTag.'>'.$sInner.'</'.$sTag.'>';
}
// Alle sepciale tags die kunnen voorkomen in de string.
$aSpecialTags = array('bold', 'code', 'underline');
// De / is in onze reguliere expressie de delimeter. Dit kan bestaan uit zo'n beetje alle niet alfabetische tekens.
// Verstandig is echter om een teken te nemen die je niet of weinig in je expressie zal gebruiken,
// je zal hem namelijk (binnen de expressie) steeds moeten backslashen,
// omdat anders wordt gedacht dat daar de expressie eindigt.
// Na de delimeter staan de modifiers. Deze geven aan hoe de expressie moet worden uitgevoerd.
// De "s" is de optie om ervoor te zorgen dat hij meer als een regel bekijkt (anders stopt hij na de eerste newline).
// De "i" zorgt ervoor dat hij case-insensitive wordt.
// De "e" zorgt ervoor dat wat er binnen het tweede argument staat wordt uitgevoerd als PHP (soort eval dus).
$sBody = '<bold>lalala</bold>';
$sBody = preg_replace('/<('.implode('|', $aSpecialTags).')>(.*?)<\/\\1>/sie', 'specialTag(\'\\1\', \'\\2\')', $sBody);
echo $sBody;
<?php // De functie die wordt uitgevoerd bij elke match in de reguliere expressie function specialTag($sTag, $sInner) { // Doe hier wat je maar wilt, ik heb een voorbeeldje gegeven. ( 'bold' => 'strong', 'code'=> 'code', 'underline' => 'ins' ); $sTag = strtr($sTag, $aTrans); return '<'.$sTag.'>'.$sInner.'</'.$sTag.'>'; } // Alle sepciale tags die kunnen voorkomen in de string. $aSpecialTags = array('bold', 'code', 'underline'); // De / is in onze reguliere expressie de delimeter. Dit kan bestaan uit zo'n beetje alle niet alfabetische tekens. // Verstandig is echter om een teken te nemen die je niet of weinig in je expressie zal gebruiken, // je zal hem namelijk (binnen de expressie) steeds moeten backslashen, // omdat anders wordt gedacht dat daar de expressie eindigt. // Na de delimeter staan de modifiers. Deze geven aan hoe de expressie moet worden uitgevoerd. // De "s" is de optie om ervoor te zorgen dat hij meer als een regel bekijkt (anders stopt hij na de eerste newline). // De "i" zorgt ervoor dat hij case-insensitive wordt. // De "e" zorgt ervoor dat wat er binnen het tweede argument staat wordt uitgevoerd als PHP (soort eval dus). $sBody = '<bold>lalala</bold>'; $sBody = preg_replace('/<('.implode('|', $aSpecialTags).')>(.*?)<\/\\1>/sie', 'specialTag(\'\\ 1\ ', \'\\ 2\ ')', $sBody);
|