Регулярное выражение только для filename.ext
Я отделяю изображения от контента следующим образом:
list($img, $string) = explode('>', $string, 2);
$isSlashes = (stripos($img, '\\')!==false);
if ($isSlashes) {
$img = stripslashes($img);
}
preg_match('|src=["\']([^"\']+)["\']|i', $img, $match);
if (empty($match[1])) {
imgres_log('Image src not found in '.$img, 'error');
imgres_joinContent($content, $img, $string, $isSlashes);
continue;
}
$src = $match[1];
... обычно это работает, за исключением случаев, когда изображения снабжены строкой запроса, например: img0880.jpg?itok=pUzE5f9d
что все портит. Как мне удалить часть после ?
отметка?
2 ответа
Ну, чтобы сделать то, что вы говорите, просто добавить? в ваше регулярное выражение.
preg_match('|src=["\']([^"\'?]+)["\']|i', $img, $match);
Но или на самом деле два ноута. 1) если изображение имеет строку запроса после?, Оно является частью URL изображения. Например, image.jpg?foo=bar может относиться к изображению, отличному от image.jpg?foo=baz. 2) вы разрешаете одинарные и двойные кавычки здесь. но что если там есть iss src="joe's_image.jpg" или src=image.jpg? оба эти случая действительны в формате HTML и завершатся неудачно с вашим скриптом.
Решение: я предлагаю использовать парсер DOM вместо регулярного выражения.
Попробуй это
preg_match("~src=(\"|'|)(.*?)[\"|'| ]~si", $img, $match);
работа для всех условий
лайк
1)
src="image.jpg?dasd=a5fsd"
выход
Array
(
[0] => src="image.jpg?dasd=a5fsd"
[1] => "
[2] => image.jpg?dasd=a5fsd
)
2)
src='image.jpg?dasd=a5fsd'
выход
Array
(
[0] => src='image.jpg?dasd=a5fsd'
[1] => '
[2] => image.jpg?dasd=a5fsd
)
3)
src=image.jpg?dasd=a5fsd
выход
Array
(
[0] => src=image.jpg?dasd=a5fsd
[1] =>
[2] => image.jpg?dasd=a5fsd
)