у меня есть немного <img>
тег src
значения, которым необходимо удалить их путь.
К сожалению, мой HTML DOM недействителен, поэтому я не могу использовать анализатор DOM и должен прибегнуть к регулярному выражению.
Моя текущая попытка:
src=(\'|")\/root\/images\/([^\/]*)\/([^(\'|"]*)
чтобы включить это:
lots of other html
<img src="/root/images/ANY MORE PATH HERE/file.jpg">
more html
в это:
lots of other html
<img src="file.jpg">
more html
Вышеописанное будет работать, когда я просто использую только группу захвата 3 И у меня есть один каталог за пределами /root/images
, но я не знаю, сколько подкаталогов будет в данном пути к файлу.
Какие-либо предложения?
Это использует preg_replace ():
<?php
$foo = '/\/.+\//';
$test = '<img src="/root/images/ANY MORE PATH HERE/file.jpg">';
echo preg_replace($foo, '', $test);
?>
Я думаю, что это простое решение с использованием Explode:
$src = "/root/images/ANY MORE PATH HERE/file.jpg";
$part = explode("/", $src);
$imageName = $part[sizeof($part)-1]; //get the last index of the array
Мне кажется, что вы можете сопоставить ноль или более символов без кавычек, за которыми следует косая черта — столько раз, сколько это возможно, и заменить эту подстроку пустой строкой. Это всегда оставит вас с src
значение, которое состоит исключительно из имени файла в конце пути.
Код: (демонстрация)
$html = <<<HTML
lots of other html
<img src="/root/images/ANY MORE PATH HERE/file.jpg">
more html
HTML;
echo preg_replace('~ src=[\'"]\K(?:[^\'"]*/)*~','',$html);
Выход:
lots of other html
<img src="file.jpg">
more html
Шаблон: ~ src=['"]\K([^'"]*/)*~
Разбивка паттернов:
~ #pattern delimiter (deliberately not slash -- to avoid escaping)
src= #match a space followed literally by "src="['"] #match either single quote or double quote
\K #restart the fullstring match (effectively forget previously matched characters)
(?: #start of non-capturing group
[^'"]* #match zero or more non-single and non-double quote characters
/ #match a forward slash
) #end of non-capturing group
* #allow zero or more occurrences of the non-capturing group
~ #pattern delimiter