function all_images(&$post){
$content = $post->post_content;
if(preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/', $content, $results)){
$i = 0;
$count = count($results);
$count = $count - 1;
while($i < $count)
{
foreach($results as $result){
echo $result[$i];
}
$i++;
}
}
}
上述循环设法从原始文本中获取所有图像。但是,它只返回一个图像。我尝试过while()和foreach()的几种不同组合,但它只返回一个图像。有谁知道我做错了什么?感谢
答案 0 :(得分:4)
$ results [1]应该是第一个带括号的子模式的所有匹配的数组,所以这个简单的东西应该有用:
if(preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/i', $content, $results)){
foreach($results[1] as $src)
{
echo "src is $src<br>";
}
}
注意我已经使用/ i修饰符使匹配大小写不敏感,这可能会对你有所帮助。
您可能还想提供一些您想要匹配的示例内容。
答案 1 :(得分:1)
你为什么要做$ count = $ count - 1?
你应该能够做到这一点:
if(preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/', $content, $results)){
foreach($results[1] as $result)
{
echo $result;
}
}
}
答案 2 :(得分:1)
您必须考虑preg_match_all
返回的数组的结构。所以试试这个:
function all_images(&$post)
{
$content = $post->post_content;
if (preg_match_all('/<img[^>]+src="(.*?)"[^>]*>/', $content, $results)) {
// $results[0] contains the whole match of the regular expression
foreach ($results[0] as $result) {
echo $result;
}
}
}