> I've got a little question. I am writing a page where I would like to > parse my own invented HTML-looking tags (but want to keep the real HTML > tags intact). I use a buffer for the output, and just before the end use > ob_get_contents() to get the whole buffer which I want to check for > those tags. > > (Something like: > > $tag->content = ob_get_contents(); > $output = $tag->interpret(); > ob_end_clean(); > echo "$output"; > ) > > Now my question is, what is the fastest way to search and replace > through this file, whereby the interpretation of the tag can be somewhat > complicated? > > I first just had a loop running character by character through this > text, looking for tags, but that is obviously way too slow. > > Now I have something like: > > preg_replace_callback ("/<(.+)>/", array($this, 'tag_callback'), > $this->content); > > But then I don't know how to interpret different tags differently. Any > suggestions? > > (A tag looks like: <CANTR REPLACE NAME=text> where then the whole tag > has to be replaced by something called 'text' that has to be looked up > in a table. So, <CANTR REPLACE NAME=text> has to be replaced with > something else than <CANTR REPLACE NAME=main> - well, you get the idea.)
Here's an example of how to use preg_replace_callback. Within the callback() function, $matches[1] is going to contain whatever value was in your NAME attribute of your CANTR tag. Act accordingly to it. <?php $text = 'Hello <cantr replace text="name">. You are on page <cantr replace text="main"> right now.'; function callback($matches) { switch($matches[1]) { case 'name': $retval = 'John'; break; case 'main': $retval = 'Index.php'; break; } return $retval; } $new_text = preg_replace_callback('/<cantr replace text="([^"]+)">/i','callback',$text); echo "<hr>"; echo $new_text; ?> ---John W. Holmes... PHP Architect - A monthly magazine for PHP Professionals. Get your copy today. http://www.phparch.com/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php