ну судя по всему(в доки не лез чисто по ситуации) экранирование в PHP работает не так как в js:
В js так:
\<спецсимвол> = <интерпретация символа>
\<обычный символ> = <обычный символ>
В php так:
\<спецсимвол> = <интерпретация символа>
\<обычный символ> = \<обычный символ>
Потому и работает так: / не является спецсимволом, а \ является, потому \\/ и \/ в итоге являются одной и той же строкой после интерпретации: '/path\/to\/file/i' === '/path\\/to\\/file/i' // PHP: true, JS: false
А "M" тут используемся в качестве заменителя для подстановки, как "N" или "X"
![](https://javascript.ru/forum/images/smilies/smile.gif)