Skip to content

Instantly share code, notes, and snippets.

@autoferrit
Created April 27, 2016 20:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save autoferrit/6ed4ad16ede41644b37992c0debfb459 to your computer and use it in GitHub Desktop.
Save autoferrit/6ed4ad16ede41644b37992c0debfb459 to your computer and use it in GitHub Desktop.
testing php regex vs builtin
<?php
function test1( $string )
{
return strtoupper( $string[0] ) === $string[0];
}
function test2( $string )
{
return preg_match( '/^[A-Z]/', $string );
}
function results($builtin, $regex) {
$faster = ($builtin > $regex) ? 'regex' : 'builtin';
if ('regex' == $faster) {
$r = 100 - (($regex / $builtin) * 100);
} else {
$r = 100 - (($builtin / $regex) * 100);
}
return "$faster is faster by " . number_format($r, 2) . "%\n\n";
}
$limit = 1000;
$builtinTotal = 0;
$regexTotal = 0;
$shortLower = "foo";
$shortUpper = "Foo";
$longLower = "foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo ";
$longUpper = "Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo ";
$vlongLower = "
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
";
$vlongUpper = "
Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
";
print "\n\n#####\n > Testing the following:\n";
print ' > $shortLower = "foo"';
print "\n";
print ' > $shortUpper = "Foo"';
print "\n";
print ' > $longLower = "foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo "';
print "\n";
print ' > $longUpper = "Foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo "';
print "\n\n";
print "###### TEST: lower short\n";
print "builtin\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test1($shortLower);
}
$end = microtime(true);
$elapsedA = $end - $start;
print " >> builtin Time elapsed: $elapsedA\n\n";
print "regex\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test2($shortLower);
}
$end = microtime(true);
$elapsedB = $end - $start;
print " >> regex Time elapsed: $elapsedB\n\n";
$builtinTotal += $elapsedA;
$regexTotal += $elapsedB;
print "Result: " . results($elapsedA, $elapsedB);
print "###### TEST: upper short\n";
print "builtin\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test1($shortUpper);
}
$end = microtime(true);
$elapsedA = $end - $start;
print " >> builtin Time elapsed: $elapsedA\n\n";
print "regex\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test2($shortUpper);
}
$end = microtime(true);
$elapsedB = $end - $start;
print " >> regex Time elapsed: $elapsedB\n\n";
$builtinTotal += $elapsedA;
$regexTotal += $elapsedB;
print "Result: " . results($elapsedA, $elapsedB);
print "###### TEST: lower long\n";
print "builtin\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test1($longLower);
}
$end = microtime(true);
$elapsedA = $end - $start;
print " >> builtin Time elapsed: $elapsedA\n\n";
print "regex\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test2($longLower);
}
$end = microtime(true);
$elapsedB = $end - $start;
print " >> regex Time elapsed: $elapsedB\n\n";
$builtinTotal += $elapsedA;
$regexTotal += $elapsedB;
print "Result: " . results($elapsedA, $elapsedB);
print "###### TEST: lower very long\n";
print "builtin\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test1($vlongLower);
}
$end = microtime(true);
$elapsedA = $end - $start;
print " >> builtin Time elapsed: $elapsedA\n\n";
print "regex\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test2($vlongLower);
}
$end = microtime(true);
$elapsedB = $end - $start;
print " >> regex Time elapsed: $elapsedB\n\n";
$builtinTotal += $elapsedA;
$regexTotal += $elapsedB;
print "Result: " . results($elapsedA, $elapsedB);
print "###### TEST: upper long\n";
print "builtin\n";
for ($i = 0; $i < $limit; $i++) {
test1($longUpper);
}
$end = microtime(true);
$elapsedA = $end - $start;
print " >> builtin Time elapsed: $elapsedA\n\n";
print "regex\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test2($longUpper);
}
$end = microtime(true);
$elapsedB = $end - $start;
print " >> regex Time elapsed: $elapsedB\n\n";
$builtinTotal += $elapsedA;
$regexTotal += $elapsedB;
print "Result: " . results($elapsedA, $elapsedB);
print "###### TEST: upper very long\n";
print "builtin\n";
for ($i = 0; $i < $limit; $i++) {
test1($vlongUpper);
}
$end = microtime(true);
$elapsedA = $end - $start;
print " >> builtin Time elapsed: $elapsedA\n\n";
print "regex\n";
$start = microtime(true);
for ($i = 0; $i < $limit; $i++) {
test2($vlongUpper);
}
$end = microtime(true);
$elapsedB = $end - $start;
print " >> regex Time elapsed: $elapsedB\n\n";
$builtinTotal += $elapsedA;
$regexTotal += $elapsedB;
print "Result: " . results($elapsedA, $elapsedB);
print "\n# Grand total: " . results($builtinTotal, $regexTotal);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment