note 43381 added to function.strtok
| From: | manicdepressive at mindless dot com | Date: | Sat, 19 Jun 2004 10:01:53 +0000 |
| Subject: | note 43381 added to function.strtok | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-71328@lists.php.net to get a copy of this message | ||
<pre><?php
/** get leading, trailing, and embedded separator tokens that were 'skipped'
if for some ungodly reason you are using php to implement a simple parser that
needs to detect nested clauses as it builds a parse tree */
$str = "(((alpha(beta))(gamma))";
$seps = '()';
$tok = strtok( $str,$seps ); // return false on empty string or null
$cur = 0;
$dumbDone = FALSE;
$done = (FALSE===$tok);
while (!$done) {
// process skipped tokens (if any at first iteration) (special for last)
$posTok = $dumbDone ? strlen($str) : strpos($str, $tok, $cur );
$skippedMany = substr( $str, $cur, $posTok-$cur ); // false when 0 width
$lenSkipped = strlen($skippedMany); // 0 when false
if (0!==$lenSkipped) {
$last = strlen($skippedMany) -1;
for($i=0; $i<=$last; $i++){
$skipped = $skippedMany[$i];
$cur += strlen($skipped);
echo "skipped: $skipped\n";
}
}
if ($dumbDone) break; // this is the only place the loop is terminated
// process current tok
echo "curr tok: ".$tok."\n";
// update cursor
$cur += strlen($tok);
// get any next tok
if (!$dumbDone){
$tok = strtok($seps);
$dumbDone = (FALSE===$tok);
// you're not really done till you check for trailing skipped
}
};
?></pre>
----
Manual Page -- http://www.php.net/manual/en/function.strtok.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+43381
Delete -- http://master.php.net/manage/user-notes.php?action=delete+43381&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+43381&report=yes
Search -- http://master.php.net/manage/user-notes.php