代码之家  ›  专栏  ›  技术社区  ›  YaBCK

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

  •  -2
  • YaBCK  · 技术社区  · 6 年前

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

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

    字符串:

    <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"

    1 回复  |  直到 6 年前
        1
  •  2
  •   The fourth bird    6 年前

    如果对背景图像url使用单引号而不是双引号,则可以使用 DOMDocument 并从div中获取style属性。

    然后使用 explode("; ") 它将返回一个数组,其中该数组的一个项将是“背景图像:url('/网站/视图\图像/344231/媒体”)。

    循环遍历数组并使用 preg_match 例如,使用类似regex的 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];
    

    这将为您提供:

    “/网站/view\u图像/344231/中等”

    Demo Php