Как сопоставить строку в php, которая содержит URL-адрес https с фиксированным количеством буквенно-цифровых символов c? - PullRequest
2 голосов
/ 21 июня 2020

У меня есть строка, которая выглядит так:

"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"

My bash regex (если мы позволим вышеупомянутому равному $str):

echo $str | grep -oE "\"res\":\"https://my.site.com/image/I/[[:alnum:]]{11}._[a-zA-Z0-9_]*_.jpg\"" \
| grep -oE "my.site.com/image/I/[[:alnum:]]{11}._[a-zA-Z0-9_]*_.jpg" | head -1

, что чисто извлекает https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg.

В PHP, я не уверен, может ли существовать эквивалент того, что у меня выше. Есть ли у кого-нибудь предложения?

Ответы [ 3 ]

2 голосов
/ 21 июня 2020

Мне кажется, что вы 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
1 голос
/ 21 июня 2020

Используя PHP, вы можете выбрать его по:

$subject = '"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"';
$regex = '/https:\/\/my\.site\.com\/image\/I\/[[:alnum:]]{11}_[a-zA-Z0-9_]*_.jpg/'
preg_match($regex , $subject , $matches);

var_dump($matches);

Результат:

array(1) {
  [0]=>
  string(51) "https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"
}
1 голос
/ 21 июня 2020

Вам просто нужно избежать всех / и . в вашем регулярном выражении, и все в порядке. Я также удалил точку ближе к концу.

my\.site\.com\/image\/I\/[[:alnum:]]{11}_[a-zA-Z0-9_]*_\.jpg

Попробуйте здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...