当字符串没有';你没有http吗?php

当字符串没有';你没有http吗?php,php,preg-match-all,Php,Preg Match All,当出现重复的特定字符时,我很难做到这一点,例如: $content = '<!CDATA[/2018/08/hello.jpg]]>{s:4:"file";s:7:"yes.jpg"'; 它们总是在寻找http/https来知道从哪里获得它,但在我的例子中,它只是部分URL,并且以不同的字符开始/结束-或者/x.jpg]或者“x.jpg” 有可能在一个由许多这样的例子组成的字符串中找到所有的.jpg图像吗?在本例中,可以找到hello.jpg和yes.jpg。对于示例数据,您可以使

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

$content = '<!CDATA[/2018/08/hello.jpg]]>{s:4:"file";s:7:"yes.jpg"';
它们总是在寻找http/https来知道从哪里获得它,但在我的例子中,它只是部分URL,并且以不同的字符开始/结束-或者
/x.jpg]
或者
“x.jpg”


有可能在一个由许多这样的例子组成的字符串中找到所有的.jpg图像吗?在本例中,可以找到hello.jpg和yes.jpg。

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

解释

  • 匹配
  • *?/
    将任何字符零次或多次非贪婪匹配,并匹配正斜杠
  • \K
    忘记以前匹配的
  • \w+\.\jpg
    匹配1+个单词字符,后跟.jpg
  • (?=\]\])
    正向前瞻,以断言接下来的内容是]]

$re='@';
预匹配全部($re,$str,$MATCHS);
打印($matches[0]);

啊,这对该部分来说太完美了,我只是稍微编辑了一下问题,因为字符串中还包含其他需要提取的JPG,很抱歉最初没有包含它@有些提示,但是现在您在字符串的末尾添加了
{s:4:“file”;s:7:“yes.jpg”
。这是唯一可以匹配的.jpg还是可以有多个?这是一个包含大量jpg引用的巨大字符串,但它们似乎被/image.jpg]或“image.jpg”包围着每次,我都只是在示例中添加额外的周围部分,以说明它们是如何存在的(例如在第一个jpg类型中)multiple/so不能用它作为正则表达式的起点,这对我来说是个棘手的问题:/I我简化了问题,因为我认为我的解释过于复杂了,感谢你已经提供的帮助,非常感谢!如果它是一个巨大的字符串,你正在寻找这些图像,这对你有用吗?
/\K\w+\.jpg(?=\]\]\\”\K\w+\.jpg(?=“)
则不存在考虑cdata的逻辑,但仅当cdata介于
/
]
之间或双引号之间时。
$pattern = '/(?:http|https):\/\/\S+\.(?:jpg|jpeg)/';
preg_match_all ($pattern, $content, $matches);
$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]);