3v4l.org

run code in 300+ PHP versions simultaneously
<?php $re = '~(*UTF) x (?<!\w.) [\d._ –-]* (*SKIP) (*F) | order (?<!\worder) [\W_]* (?:number)? [\W_]* [\d._ –-]* (*SKIP) (*F) | (?<res>[1234578] (?>[._ –-]{0,3}\d){2} (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){2} ) (?: 0{4} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){4} | (?<res>0 (?> 0{2} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){2} (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){2}) (?: 0{4} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){4} | (?<res>6 (?> 66 [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){2} (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){2}) (?: 0{4} [\d._ –-]* (*SKIP) (*F) )? (?>[._ –-]{0,3}\d){4} | 9 [\d._ –-]* (*SKIP) (*F)~ixJ'; $str = '//won\'t match if it is preceded with \'X\' or \'x\' x123456789 X123456789 x123-456-789 X123-456-789 123-456-789 ordernumber 123-456-789 order number123-456789 order number----123-456789 order number 123456789 ordernumber-x123456787 ordernumber-123456787 ORDERNUMBER-123456789 ordernumber - 123456789 ordernumber #123456789 ordernumber *%&%*123456789 ordernumber !@#$%^&123456789 order.number 123456789 order_number 123456789 order._.number 123456789 order...number#123456789 order-.-.-.-.123456789 order 123456789 order..123456789 order#123456789 order_#123456789 order._.#123456789 order___123456789 order#number 123456789 order......number 123456789 order.number.123456789 social security number 123-456-789 ordernumber !@#$%^&x123456789 123456789 #@%#$%#$123456789#$%#$^$# 123-456789 123456789 123456789 123 45 6789 123-45-6789 123-45-6789 123 – 45 – 6789 123.45.6789 123_45_6789 123 456 789 123-456-789 123 – 456 – 789 123.456.789 123_456_789 1234 56 789 1234-56-789 1234 – 56 – 789 1234.56.789 1234_56_789 12 345 6789 12-345-6789 12 – 345 – 6789 12.345.6789 12_345_6789 The number should not be matched at all for the following rules. If the number beginning with the number “9” 912345678 912000000 If the number “666” in positions 1 – 3. 666000000 666450000 666129876 If the number “000” in positions 1 – 3. 000000000 000450000 000120000 If the number “00” in positions 4 – 5. 123006789 876001234 765003456 if the number “0000” in positions 6 – 9 123450000 123000000 876000000 x123456789 X123456789 x123-456-789 X123-456-789 '; $n = 10000; $re2 = '/\b(?>x|order(?>[\W_]*number)?[\W_]*)\d+(*SKIP)(*F)|(?=(?>[._ –-]*\d){9})(?>(?>9|6{3}|0{3}|(?>\d\D*){3}00|(?>\d\D*){5}0{4})(*SKIP)(*F)|\d(?>\D*\d){4})/mi'; $start = microtime(true); for($i=0; $i<$n; $i++) { preg_match_all($re2, $str, $matches, PREG_SET_ORDER); } $time2 = microtime(true) - $start; $start = microtime(true); for($i=0; $i<$n; $i++) { preg_match_all($re, $str, $matches, PREG_SET_ORDER); } $time1 = microtime(true) - $start; $re3 = '/(\border\D*\W*)\d+(*SKIP)(*F)|(\border\D*number\W*)\d+(*SKIP)(*F)|(?<!x)(?=(?:[._ –-]*\d){9})(?!9|66\D*6|00\D*0|(?:\d\D*){3}0\D*0|(?:\d\D*){5}0(?:\D*0){3})\d(?:[._ –-]*\d){4}/mi'; $start = microtime(true); for($i=0; $i<$n; $i++) { preg_match_all($re3, $str, $matches, PREG_SET_ORDER); } $time3 = microtime(true) - $start; $re4 = '~(*UTF) x (?<! \w x ) [\d._ –-]* (*SKIP) (*F) | order (?<! \w order ) [\W_]* (?:number)? [\W_]* [\d._ –-]* (*SKIP) (*F) | [1-578] (?:[._ –-]{0,3}+\d){2} (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?:[._ –-]{0,3}+\d){2} (?= (?: 0{4} [\d._ –-]* (*SKIP) (*F) )? (?:[._ –-]{0,3}+\d){4} ) | 0 (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?: [._ –-]{0,3}+ \d ){2} (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?: [._ –-]{0,3}+ \d ){2} (?= (?: 0{4} [\d._ –-]* (*SKIP) (*F) )? (?: [._ –-]{0,3}+ \d ){4} ) | 6 (?: 6{2} [\d._ –-]* (*SKIP) (*F) )? (?: [._ –-]{0,3}+ \d ){2} (?: 0{2} [\d._ –-]* (*SKIP) (*F) )? (?: [._ –-]{0,3}+ \d ){2} (?= (?: 0{4} [\d._ –-]* (*SKIP) (*F) )? (?: [._ –-]{0,3}+ \d ){4} ) | 9 [\d._ –-]* (*SKIP) (*F) ~ix'; $start = microtime(true); for($i=0; $i<$n; $i++) { preg_match_all($re4, $str, $matches, PREG_SET_ORDER); } $time4 = microtime(true) - $start; printf("Casimir: %.2e\nAnubhava: %.2e\nKamesh: %.2e\nCasimir (la): %.2e", $time1, $time2, $time3, $time4);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.1.120.0070.47219.00
8.1.110.0070.48718.96
8.1.100.0160.46318.93
8.1.90.0130.47519.01
8.1.80.0120.46418.85
8.1.70.0100.47119.01
8.1.60.0070.47019.02
8.1.50.0090.49018.13
8.1.40.0170.47119.04
8.1.30.0130.50219.07
8.1.20.0130.47719.06
8.1.10.0170.46619.08
8.1.00.0170.46418.94
8.0.250.0170.46818.38
8.0.240.0070.47618.26
8.0.230.0070.49518.42
8.0.220.0160.44818.22
8.0.210.0100.47118.27
8.0.200.0100.48618.37
8.0.190.0130.45718.23
8.0.180.0130.44518.35
8.0.170.0070.49118.33
8.0.160.0100.45918.46
8.0.150.0170.47018.29
8.0.140.0130.45318.30
8.0.130.0160.46718.34
8.0.120.0160.45718.15
8.0.110.0100.45718.18
8.0.100.0170.45018.26
8.0.90.0070.48018.18
8.0.80.0070.46818.30
8.0.70.0200.46418.24
8.0.60.0030.47918.29
8.0.50.0070.47718.34
8.0.30.0160.47118.31
8.0.20.0100.45418.37
8.0.10.0130.46418.42
7.4.330.0070.46615.55
7.4.320.0100.45918.01
7.4.300.0130.46118.04
7.4.290.0100.47518.07
7.4.280.0170.46317.93
7.4.270.0160.45417.95
7.4.260.0130.46317.92
7.4.250.0070.46718.02
7.4.240.0100.46618.00
7.4.230.0100.45317.93
7.4.220.0070.46818.02
7.4.210.0030.46118.00
7.4.200.0160.49418.01
7.4.190.0090.45617.89
7.4.180.0130.46318.02
7.4.160.0170.48018.12
7.4.150.0100.46318.07
7.4.140.0100.48318.04
7.4.130.0230.45517.95
7.4.120.0200.44817.83
7.4.110.0100.46018.00
7.4.100.0070.46417.96
7.4.90.0070.46718.05
7.4.80.0070.45717.95
7.4.70.0000.48817.96
7.4.60.0070.45219.66
7.4.50.0030.45017.84
7.4.40.0070.44517.88
7.4.30.0030.44317.77
7.4.20.0000.45217.96
7.4.10.0130.43417.94
7.4.00.0100.42317.89

preferences:
26.48 ms | 403 KiB | 5 Q