3v4l.org

run code in 300+ PHP versions simultaneously
<?php $re = '/(\((?:[^()]++|(?1))*\))(*SKIP)(*F)|,\h*/'; $strings = [ "Test A, Test B, Test C (data1, data1)", "Test A, Test B, Test C (data1, data1), Test D (data1, data1), Test E (data1, data1(data, data))", "Test A, Test B, Test C (data1, data1), Test D (data1, data1), Test E ((data1, data1))" ]; foreach($strings as $s) { print_r(preg_split($re, $s)); }
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.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.27, 8.4.1 - 8.4.14
Array ( [0] => Test A [1] => Test B [2] => Test C (data1, data1) ) Array ( [0] => Test A [1] => Test B [2] => Test C (data1, data1) [3] => Test D (data1, data1) [4] => Test E (data1, data1(data, data)) ) Array ( [0] => Test A [1] => Test B [2] => Test C (data1, data1) [3] => Test D (data1, data1) [4] => Test E ((data1, data1)) )

preferences:
158.84 ms | 408 KiB | 5 Q