the only way to really test is with a large volume of text. So I'll do some tests here:
Code: Select all
<?php
set_time_limit(0);
$file = 'DavidCopperfield.txt';
$content = file_get_contents($file);
$iterations = 100;
$times = array();
$sets = array(
array('#\badvertis(ement|ing)\b#i'),
array('#\badvertis(?:ement|ing)\b#i'),
array('#\badvertisement\b#i','#\badvertising\b#i'),
array('#\badvertisements?\b#i'),
array('#\badvertisement\b#i','#\badvertisements\b#i'),
);
$i = 0;
$start = 0;
$stop = 0;
$count = 0;
foreach($sets as $set => $patterns)
{
$times[$set] = array();
foreach($patterns as $pattern)
{
$times[$set][$pattern] = array();
$times[$set][$pattern]['count'] = 0;
$times[$set][$pattern]['time'] = 0;
$times[$set][$pattern]['matches'] = null;
for($i = 0; $i < $iterations; $i++)
{
$start = microtime(true);
$count = preg_match_all($pattern,$content,$matches);
$stop = microtime(true);
$times[$set][$pattern]['count'] = $count;
$times[$set][$pattern]['time'] = bcadd($times[$set][$pattern]['time'],$stop - $start,20);
$times[$set][$pattern]['matches'] = $matches;
unset($matches);
}
}
}
var_export($times);
?>
Code: Select all
array (
0 =>
array (
'#\\badvertis(ement|ing)\\b#i' =>
array (
'count' => 8,
'time' => '6.69298410415649300000',
'matches' =>
array (
0 =>
array (
0 => 'advertisement',
1 => 'advertisement',
2 => 'advertisement',
3 => 'advertising',
4 => 'Advertising',
5 => 'advertisement',
6 => 'advertisement',
7 => 'advertisement',
),
1 =>
array (
0 => 'ement',
1 => 'ement',
2 => 'ement',
3 => 'ing',
4 => 'ing',
5 => 'ement',
6 => 'ement',
7 => 'ement',
),
),
),
),
1 =>
array (
'#\\badvertis(?:ement|ing)\\b#i' =>
array (
'count' => 8,
'time' => '6.62231302261352600000',
'matches' =>
array (
0 =>
array (
0 => 'advertisement',
1 => 'advertisement',
2 => 'advertisement',
3 => 'advertising',
4 => 'Advertising',
5 => 'advertisement',
6 => 'advertisement',
7 => 'advertisement',
),
),
),
),
2 =>
array (
'#\\badvertisement\\b#i' =>
array (
'count' => 6,
'time' => '6.63905668258666700000',
'matches' =>
array (
0 =>
array (
0 => 'advertisement',
1 => 'advertisement',
2 => 'advertisement',
3 => 'advertisement',
4 => 'advertisement',
5 => 'advertisement',
),
),
),
'#\\badvertising\\b#i' =>
array (
'count' => 2,
'time' => '6.57100462913513500000',
'matches' =>
array (
0 =>
array (
0 => 'advertising',
1 => 'Advertising',
),
),
),
),
3 =>
array (
'#\\badvertisements?\\b#i' =>
array (
'count' => 7,
'time' => '6.63881516456603600000',
'matches' =>
array (
0 =>
array (
0 => 'advertisement',
1 => 'advertisements',
2 => 'advertisement',
3 => 'advertisement',
4 => 'advertisement',
5 => 'advertisement',
6 => 'advertisement',
),
),
),
),
4 =>
array (
'#\\badvertisement\\b#i' =>
array (
'count' => 6,
'time' => '6.57747244834900200000',
'matches' =>
array (
0 =>
array (
0 => 'advertisement',
1 => 'advertisement',
2 => 'advertisement',
3 => 'advertisement',
4 => 'advertisement',
5 => 'advertisement',
),
),
),
'#\\badvertisements\\b#i' =>
array (
'count' => 1,
'time' => '6.57750916481017900000',
'matches' =>
array (
0 =>
array (
0 => 'advertisements',
),
),
),
),
)