note 70910 deleted from function.preg-match-all by felipe
| From: | felipe@php.net | Date: | Sun, 23 Mar 2008 22:57:48 +0000 |
| Subject: | note 70910 deleted from function.preg-match-all by felipe | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-137387@lists.php.net to get a copy of this message | ||
Note Submitter: sam at NOSPAM dot aigc dot net
----
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;
}
?>