3v4l.org

run code in 300+ PHP versions simultaneously
<?php $pattern = '#(?<!\\\\)\\.#'; $pattern = '#(?<!\\\\)((?:\\\\\\\\)*)\\.#'; //$pattern = '#((?<!\\\\)|(?<=\\\\\\\\)*)\\.#'; $tests = ['bar.baz', 'bar\\.baz', 'bar\\\\.baz', 'bar\\\\\\.baz', 'bar\\\\\\\\.baz']; var_dump($pattern); $results = []; foreach ($tests as $path) { $split = preg_split($pattern, $path, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); $split = array_reduce( $split, static function ($result, $value) { $lastIndex = count($result) - 1; if ($lastIndex >= 0 && preg_match('#^\\\\*$#', $value)) { $result[$lastIndex] = $result[$lastIndex] . $value; } else { $result[] = $value; } return $result; }, [] ); $unescaped = array_map( static function ($value) { return str_replace(['\\\\','\\.'], ['\\','.'], $value); }, $split ); $results[$path] = [$split, $unescaped]; } var_dump($results);
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.4, 8.3.6 - 8.3.7
string(22) "#(?<!\\)((?:\\\\)*)\.#" array(5) { ["bar.baz"]=> array(2) { [0]=> array(2) { [0]=> string(3) "bar" [1]=> string(3) "baz" } [1]=> array(2) { [0]=> string(3) "bar" [1]=> string(3) "baz" } } ["bar\.baz"]=> array(2) { [0]=> array(1) { [0]=> string(8) "bar\.baz" } [1]=> array(1) { [0]=> string(7) "bar.baz" } } ["bar\\.baz"]=> array(2) { [0]=> array(2) { [0]=> string(5) "bar\\" [1]=> string(3) "baz" } [1]=> array(2) { [0]=> string(4) "bar\" [1]=> string(3) "baz" } } ["bar\\\.baz"]=> array(2) { [0]=> array(1) { [0]=> string(10) "bar\\\.baz" } [1]=> array(1) { [0]=> string(8) "bar\.baz" } } ["bar\\\\.baz"]=> array(2) { [0]=> array(2) { [0]=> string(7) "bar\\\\" [1]=> string(3) "baz" } [1]=> array(2) { [0]=> string(5) "bar\\" [1]=> string(3) "baz" } } }
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 string(22) "#(?<!\\)((?:\\\\)*)\.#" array(5) { ["bar.baz"]=> array(2) { [0]=> array(2) { [0]=> string(3) "bar" [1]=> string(3) "baz" } [1]=> array(2) { [0]=> string(3) "bar" [1]=> string(3) "baz" } } ["bar\.baz"]=> array(2) { [0]=> array(1) { [0]=> string(8) "bar\.baz" } [1]=> array(1) { [0]=> string(7) "bar.baz" } } ["bar\\.baz"]=> array(2) { [0]=> array(2) { [0]=> string(5) "bar\\" [1]=> string(3) "baz" } [1]=> array(2) { [0]=> string(4) "bar\" [1]=> string(3) "baz" } } ["bar\\\.baz"]=> array(2) { [0]=> array(1) { [0]=> string(10) "bar\\\.baz" } [1]=> array(1) { [0]=> string(8) "bar\.baz" } } ["bar\\\\.baz"]=> array(2) { [0]=> array(2) { [0]=> string(7) "bar\\\\" [1]=> string(3) "baz" } [1]=> array(2) { [0]=> string(5) "bar\\" [1]=> string(3) "baz" } } }

preferences:
119.21 ms | 404 KiB | 178 Q