laravel/framework 9.47.0 の blade の字句解析に不具合がありそう

ありそうとかいう曖昧な表記で責任を回避する

環境

laravel/framework 9.47.0
PHP 8.1.12

症状

前提として、レンダしたい blade のキャッシュが存在しないためにコンパイルする際に発生します。

例えば、@if (auth()->user()->isSystemAdmin()) みたいな if ディレクティブを書いた時、
字句解析が if (auth() までを対象としてしまい、
Illuminate\View\Compilers\BladeCompiler の hasEvenNumberOfParentheses() の以下の行でエラーを吐く。

$tokens = token_get_all('<?php '.$expression);

おそらくすべてのディレクティブの条件式に () を含むものを指定すると発生し、
例外処理が上手く行ってないのかは不明ですが、laravel 側で捕捉できず結果的に 502 エラーが出ます。

原因

@ から始まる語句の解析に Illuminate\View\Compilers\BladeCompiler の
compileStatements() を利用していたようで、
9.46.0 以前と 9.47.0 以降とで大きく内容が異なっています。

9.46.0 まで

return preg_replace_callback(
     '/\B@(@?\w+(?:::\w+)?)([ \t]*)(\( ( (?>[^()]+) | (?3) )* \))?/x',
function ($match) {
         return $this->compileStatement($match);
     }, $value
);

9.47.0 から

preg_match_all('/\B@(@?\w+(?:::\w+)?)([ \t]*)(\( ( [\S\s]*? ) \))?/x',
$template, $matches);

暫定の対策

laravel/framework を 1 つ前のバージョンである 9.46.0 にしてやりすごすしかない気がします。

"laravel/framework": "9.46.0",