当字符串没有';你没有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]);