Следующему регулярному выражению соответствует вся строка .*
, если она заканчивается в периоде \.
, за которым следует одно из указанных расширений файла (?:jpe?g|png|gif|pdf)
, при этом учитывается необязательная группа параметров запроса (?:\?\S+)?
, предшествующая концу линии $
:
/.*\.(?:jpe?g|png|gif|pdf)(?:\?\S+)?$/i
См. regex demo . Флаг i
разрешает сопоставление без учета регистра.
В PHP:
$filename = 'http://localhost/index.php/profile/stackoverflow/0000000123.911.png?_id=900d';
$pattern = '/.*\.(?:jpe?g|png|gif|pdf)(?:\?\S+)?$/i';
$result = preg_match($pattern, $filename, $matches);
, что приводит к 1
( означает успех ) как $result
и массив, содержащий совпавшую строку как $matches
.
Если вы хотите работать со списком текстов и получать только те из них, которые соответствуют шаблону, вы также можете использовать preg_grep () :
$texts = [
'trial.gen.OO7.jpg',
'http://localhost/index.php/profile/stackoverflow/0000000123.911.png?_id=900d',
'fast-n-furious.pdf',
'trial.gen.OO7.jpg.php',
'http://localhost/index.php/profile/stackoverflow/0000000123.911.?_id=84d',
'fast-n-furious'
];
$results = preg_grep($pattern, $texts);
$results
, затем содержит:
Array
(
[0] => trial.gen.OO7.jpg
[1] => http://localhost/index.php/profile/stackoverflow/0000000123.911.png?_id=900d
[2] => fast-n-furious.pdf
)