Как удалить подстроку filepath из значения src тегов img, встречающихся в HTML-тексте?

у меня есть немного <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, но я не знаю, сколько подкаталогов будет в данном пути к файлу.

Какие-либо предложения?

-3

Решение

Это использует preg_replace ():

<?php
$foo = '/\/.+\//';
$test =  '<img src="/root/images/ANY MORE PATH HERE/file.jpg">';
echo preg_replace($foo, '', $test);
?>
1

Другие решения

Я думаю, что это простое решение с использованием 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
-1

Мне кажется, что вы можете сопоставить ноль или более символов без кавычек, за которыми следует косая черта — столько раз, сколько это возможно, и заменить эту подстроку пустой строкой. Это всегда оставит вас с 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
-2
По вопросам рекламы [email protected]