没有http时如何从字符串中获取JPG? php

How to get JPG from string when it doesn't have http? php

当有重复的特定字符时,我很难做到这一点,例如:

$content = '<!CDATA[/2018/08/hello.jpg]]>{s:4:"file";s:7:"yes.jpg"';

我只能找到这样的建议:

$pattern = '/(?:http|https):\/\/\S+\.(?:jpg|jpeg)/';
preg_match_all ($pattern, $content, $matches);

一直在寻找 http/https 以了解从哪里获取它,但在我的情况下,它只是部分 url 和 start/end 具有不同的字符 - /x.jpg]"x.jpg"

有没有可能在一个由很多这样的例子组成的字符串中找到所有的 .jpg 图片?在此示例中,它会找到 hello.jpg 和 yes.jpg.

对于您的示例数据,您可以使用:

<!CDATA\[.*?/\K\w+\.\jpg(?=\]\])

说明

  • <!CDATA\[ 匹配 <!CDATA[
  • .*?/ 非贪婪匹配任意字符零次或多次并匹配正斜杠
  • \K忘记是之前匹配的
  • \w+\.\jpg匹配1+个单词字符后跟.jpg
  • (?=\]\]) 肯定的前瞻断言以下是 ]]

Regex demo

$re = '@<!CDATA\[.*?/\K\w+\.\jpg(?=\]\])@';
$str = '<!CDATA[/2018/08/hello.jpg]]><!CDATA[/2018/08/another.jpg]]>';
preg_match_all($re, $str, $matches);
print_r($matches[0]);

Php demo