Scripts
functie preg_highlight
Ik vond het voor mezelf erg wenselijk om snel en nauwkeurig de resultaten van een regular expression snel te kunnen weergeven. ik heb hiervoor een functie geschreven waarbij je vanalles kunt meegeven: patroon - ZONDER delimiter, ZONDER modifiers subject - de string waarin je wilt highlighten args - de argument als modifiers (deze kun je bitwise meegeven, bijv. caseless en dotall = PREG_HIGHLIGHT_CASELESS|PREG_HIGHLIGHT_DOTALL) en subpatroon die je eventueel kunt highlight als er vragen zijn hoor ik die graag;)
functie-preghighlight
<?php
error_reporting (E_ALL);
// paar defines voor extra typen
define ('PREG_HIGHLIGHT_CASELESS', 1);
define ('PREG_HIGHLIGHT_MULTILINE', 2);
define ('PREG_HIGHLIGHT_DOTALL', 4);
define ('PREG_HIGHLIGHT_EXTENDED', 8);
/*
* string preg_highlight (string pattern, string subject[, int args[, int sub]])
*
* @param string pattern
* @param string subject
* @param integer args optional
* @param integer sub optional
*
* @return string
*/
function preg_highlight ($pattern, $subject, $args = 0, $sub = 0)
{
// hoe moeten resultaten gehighlight worden
// 1e %s = kleur, 2e %s = de text
$highlight = '<span style="background-color: %s">%s</span>';
// kleuren - all = hele match
// sub = subpatroon
$colors = array (
'all' => '#808080',
'sub' => '#c0c0c0'
);
// het patroon, delimiter escapen
$pattern = '/' . str_replace ('/', '\/', $pattern) . '/';
// caseless
if ($args & PREG_HIGHLIGHT_CASELESS)
{
$pattern .= 'i';
}
// multiline
if ($args & PREG_HIGHLIGHT_MULTILINE)
{
$pattern .= 'm';
}
// dot match all
if ($args & PREG_HIGHLIGHT_DOTALL)
{
$pattern .= 's';
}
// extended match - comments allowed
if ($args & PREG_HIGHLIGHT_EXTENDED)
{
$pattern .= 'x';
}
// als er geen subpatroon aangegeven is
if ($sub == 0)
{
// is de replacement simpel
$replacement = sprintf ($highlight, $colors['all'], $sub);
}
// als er wel een subpatroon is
else
{
// evaluaten als php
$pattern .= 'e';
// begin met replacement, de code moet goed intact gehouden worden
$replacement = "' . str_replace ('\\" . $sub . "', '" . sprintf ($highlight, $colors['sub'], '\\' . $sub) . "', '\\0') . '";
// en nu de complete replacement
$replacement = "'" . sprintf ($highlight, $colors['all'], $replacement) . "'";
}
// return het resultaat
return preg_replace ($pattern, $replacement, $subject);
} // ** END preg_highlight
// ** EOF **
?>
Reacties
0