$re = '/@\w+(\(((?:[^()]++|(\g<1>))*)\))?/m';
$str = '@for($i = 0; $i < 10; $i++)
{{ $i }}
@endfor
@if(
!empty($name)
&& $name == \'Carlos\'
)
Hi Carlos
@endif
@csrf
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php