3v4l.org

run code in 500+ PHP versions simultaneously
<?php $pattern = <<<'REGEX' ~ (?(DEFINE) (?<dqstring> " [^\\"]*+ (?s: \\ . [^\\"]* )*+ " ) (?<bcontent> [^()"]*+ (?: \g<dqstring> [^()"]* )*+ ) (?<rbrackets> \( \g<bcontent> (?: \g<rbrackets> \g<bcontent> )*+ \) ) (?<pcontent> [^,()"]* (?: (?: \g<dqstring> | \g<rbrackets> ) [^,()"]* )* ) ) \G [(,] \s* (?<param> \g<pcontent> ) (*:param) | (?<funcName> \w+ ) (*:funcName) ~xu REGEX; $str = 'not(matches(#[Sécurité][Alarme][Mode]#, ["Desarmer",{"action":"Desarmer Sys"}]), result)'; preg_match_all($pattern, $str, $matches, PREG_SET_ORDER); foreach($matches as $m) { $type = $m['MARK']; echo "$type: ", $m[$type], PHP_EOL; }
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.21, 8.5.0 - 8.5.7
funcName: not param: matches(#[Sécurité][Alarme][Mode]#, ["Desarmer",{"action":"Desarmer Sys"}]) param: result

preferences:
85.61 ms | 1272 KiB | 4 Q