Мне кажется, что вы sh до проверяете , что соответствующий URL-адрес заключен в двойные кавычки и ему предшествуют "res":
, , затем , вы хотите извлечь только URL.
Предварительный просмотр в начале и предварительный просмотр в конце подтвердит точную полную строку.
Точки должны быть экранированы, чтобы их можно было рассматривать как строковые литералы.
У вас была дополнительная точка перед подчеркиванием, которую, я не думаю, вы хотите сохранить.
Вам не нужно избегать косой черты, если вы используете символы, отличные от sla sh в качестве разделителей шаблонов (я буду использовать ~
).
[a-zA-Z0-9_]
более кратко записывается как \w
.
Код: ( Demo )
$string = '"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"';
echo preg_match('~(?<=^"res":")https://my\.site\.com/image/I/[a-zA-z\d]{11}_\w*_\.jpg(?="$)~', $string, $out) ? $out[0] : 'no match';
Вывод:
https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg