note 70910 added to function.preg-match-all
| From: | sam at NOSPAM dot aigc dot net | Date: | Fri, 03 Nov 2006 21:10:24 +0000 |
| Subject: | note 70910 added to function.preg-match-all | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-119350@lists.php.net to get a copy of this message | ||
Here's something I made awhile ago to colorize long regular expressions. I can't guarantee
it'll work for everything/everyone, but it helps me a lot and might help someone else.
Usage:
<?php echo highlight_regexp("/^[0-9]{2}:[0-9]{2}[apAP]$/"); ?>
<?php
function highlight_regexp($pattern) {
$colors = array(
"/" => "red",
"(" => "green",
")" => "green",
"[" => "blue",
"]" => "blue",
"{" => "orange",
"}" => "orange"
);
$specialchars = array("?","+","*",".","|");
$space = " ";
for ($i = 0; $i < strlen($pattern); $i++) {
unset($spacing);
if ($skip) {
$show = 1;
$skip = 0;
} else
switch ($pattern{$i}) {
case "/":
case "(":
case "[":
case "{":
if ($skip) {
$show = 1;
$skip = 0;
} else {
$tier++;
if ($pattern{$i} == "/")
$tier = 0;
for ($j = 0; $j < $tier; $j++)
$spacing .= $space;
$pattern{$i} == "{" or $return .= "<br>$spacing";
$return .= "<font
color=".$colors[$pattern{$i}]."><b>".$pattern{$i}."</b></font>";
if ($pattern{$i} == "(")
$spaceover = "<br>$spacing$space";
else {
if ($pattern{$i} == "[")
$inbrackets = 1;
unset($spaceover);
}
}
$show = 0;
break;
case ")":
case "]":
case "}":
if ($skip) {
$show = 1;
$skip = 0;
} else {
for ($j = 0; $j < $tier; $j++)
$spacing .= $space;
if ($pattern{$i} == ")")
$return .= "<br>$spacing";
elseif ($pattern{$i} == "]")
$inbrackets = 0;
$return .= "<font
color=".$colors[$pattern{$i}]."><b>".$pattern{$i}."</b></font>\n";
$spaceover = "<br>$spacing";
$tier--;
}
$show = 0;
break;
default:
$show = 1;
break;
}
if ($show) {
if (!$inbrackets && in_array($pattern{$i},$specialchars)) {
$skipspaceover = 1 ;
$preextra = "<font
style='font-weight:bold;color:red'>";
$postextra = "</font>";
$replace = "";
} elseif ($pattern{$i} == " ") {
$preextra = "<i style='font-size:10px'>";
$replace = "(space)";
$postextra = "</i>";
} else
$preextra = $postextra = $replace = $skipspaceover = "";
if ($spaceover && !$skipspaceover) {
$return .= $spaceover;
unset($spaceover);
}
$return .= $preextra.($replace ? $replace : $pattern{$i}).$postextra;
}
}
return $return;
}
?>
----
Server IP: 216.194.113.175
Probable Submitter: 64.146.132.115
----
Manual Page -- http://www.php.net/manual/en/function.preg-match-all.php
Edit -- https://master.php.net/note/edit/70910
Del: integrated -- https://master.php.net/note/delete/70910/integrated
Del: useless -- https://master.php.net/note/delete/70910/useless
Del: bad code -- https://master.php.net/note/delete/70910/bad+code
Del: spam -- https://master.php.net/note/delete/70910/spam
Del: non-english -- https://master.php.net/note/delete/70910/non-english
Del: in docs -- https://master.php.net/note/delete/70910/in+docs
Del: other reasons-- https://master.php.net/note/delete/70910
Reject -- https://master.php.net/note/reject/70910
Search -- https://master.php.net/manage/user-notes.php