获取两个字符串之间的字符串 [PHP]

Get string between two strings [PHP]

好的,这可能在互联网上到处都是,但我找不到解决方案,一直在搜索和尝试不同的方法。

到目前为止我尝试过的主要方法如下:

字符串:

<div data-image-id="344231" style="height: 399.333px; background-image: url("/website/view_image/344231/medium"); background-size: contain;"></div>

代码:

preg_match_all('/(style)=("[^"]*")/i', $value, $match);
preg_match('/background-image: url("(.*?)");/', $match[2][0], $match);
print_r($match);

我猜我不能使用:

background-image: url(""); 而不是 preg_match

有人可以给我一些指导,告诉我如何实现:

"/website/view_image/344231/medium"

如果您对背景图像使用单引号 url 而不是双引号,您可以使用 DOMDocument 并从 div.

获取样式属性

然后使用 explode("; "),这将 return 一个数组,其中该数组的一项将是 "background-image: url('/website/view_image/344231/medium')"。

遍历数组并使用 preg_match 和正则表达式,例如 background-image: url\(([^)]+)\),它将在一组中捕获括号之间的内容。

如果存在正则表达式匹配,则存储组中的值。

$html = <<<HTML
<div data-image-id="344231" style="height: 399.333px; background-image: url('/website/view_image/344231/medium'); background-size: contain;"></div>
HTML;
$doc = new DOMDocument();
$doc->loadHTML($html);
$elm = $doc->getElementsByTagName("div");
$result = array ();
$style = $doc->getElementsByTagName("div")->item(0)->getAttribute("style");
foreach (explode("; ", $style) as $str)
    if (preg_match ('/background-image: url\(([^)]+)\)/', $str, $matches)) {
        $result[] = $matches[1];
    }
echo $result[0];

那会给你:

'/website/view_image/344231/medium'

Demo Php