functie-preghighlight
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?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 **
?>
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 **
?>