با سلام و احترام
من قبل از این که این مشکل را مطرح کنم دیدم در قسمت سوالات این قسمت یکی دیگه از دوستان همچین مشکلی داشته ولی متوجه نشدم که خطا از کجا میتواند باشه
$pattern = '/^' . str_replace(['/', '{', '}'], ['\\/', '(?<', '>[-%\\w]+)'], '/post/{slug}') . '$/';
var_dump($pattern);
خروجی کد بالا برای من در مرورگر به شکل زیر میباشد
string(28) "/^\\/post\\/(?[-%\\w]+)$/"
که خروجی بالا اشتباه است ولی اگر بجای کاراکتر > از هر کارکتر دیگه برای replace کردن استفاده کنی مشکل حل میشود مثلا
$pattern = '/^' . str_replace(['/', '{', '}'], ['\\/', '(?[', '>[-%\\w]+)'], '/post/{slug}') . '$/';
var_dump($pattern);
خروجی کد بالا به شکل زیر میباشد
string(28) "/^\\/post\\/(?[slug>[-%\\w]+)$/"
من واقعا هرچی جستجو هم کردم نتوانستم علت این مشکل را پیدا کنم آیا راه حلی به ذهن شما میرسد که بنده را راهنمایی نمایید
یک نکته دیگه این که کد replace اول که مشکل دارد در صورتی که کد را در vscode با اکستنشن code runner اجرا کنی خروجی درست میباشد ولی همان کد در مرورگر خروجی متفاوتی دارد
و نکته دیگه این که هردو خروجی string(28) را نشان میدهد ولی خروجی اول تعداد کاکترهای آن کمتر میباشد
سپاس