$re = '/(?|(?:@can|hasPermissionTo|hasDirectPermission)\(\s*(?P<quote>[\'"])(?P<string>.*?)\1\)|\((?P<quote>[\'"])can:(?P<string>.*?)\1\)|\(\[[^][]*(?P<quote>[\'"])can:(?P<string>.*?)\1[^][]*]\))/su';
$str = '@can(\'event-tools::menu.view\')
$this->middleware(\'can:access registration check\');
Route::prefix(\'administration\')->middleware([\'auth\', \'verified\', \'can:access admin area\'])->group(static function () {
Route::prefix(\'organisation/{organisation}\')->middleware([\'auth\', \'verified\', \'can:access organisation area\', \'mustHaveOrganisation\'])->group(static function () {';
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