逐行计算img标签

时间:2013-07-05 04:12:03

标签: php regex

我正在尝试逐行计算字符串中的所有<img>标记,但无法弄清楚。 我已经逐行拆分字符串,然后计算后面的<img>标记。

示例:

$string = "
some text <img src="" /> some text <img src="" /> some text  <img src="" /> some text \n
some text <img src="" /> some text `<img src="" /> some text  <img src="" /> some text ";

现在我的代码是 首先逐行拆分

$array = explode("\n", $string);

现在计算var string第一行中有多少<img>个标签。

$first_line = $array['0'];

我正在使用preg_match()来获取img标签的匹配。

$img_line = preg_match("#<img.+>#U", $array['0']);
echo count($img_line);

这对我不起作用,在$ string中每行有3 <img src="">但我的代码只给我1个。

任何暗示或提示都受到高度赞赏。

4 个答案:

答案 0 :(得分:1)

如果您逐行执行简单的explode,则会为您提供计数:

$explode = explode('<img ', $array[0]);
echo count($explode);

答案 1 :(得分:0)

得到了..

每行拆分字符串后。

$first_line = $array['0'];
$match = preg_match_all("#<img.+>#U", $first_line, $matches);
print_r($matches);
echo count($matches['0']);

上面的代码将返回此..

    Array
    (
        [0] => Array
            (
                [0] => 
                [1] => 
                [2] => 
            )
    )

3

答案 2 :(得分:0)

您可以尝试以下代码:

<?php
$string = <<<TXT
some text <img src="" /> some text <img src="" /> some text  <img src="" /> some text
some text <img src="" /> some text <img src="" /> some text  <img src="" /> some text
TXT;

$lines = explode("\n", $string);
// For each line
$count = array_map(function ($v) {
  // If one or more img tag are found
  if (preg_match_all('#<img [^>]*>#i', $v, $matches, PREG_SET_ORDER)) {
    // We return the count of tags.
    return count($matches);
  }
}, $lines);

/*
Array
(
    [0] => 3 // Line 1
    [1] => 3 // Line 2 
)
*/
print_r($count);

此处,PREG_SET_ORDER将结果存储在单个级别(第一次捕获到索引$matches[0],第二次捕获到索引$matches[1])。因此,我们可以轻松检索捕获次数。

答案 3 :(得分:0)

<?php

$string = 'some text <img src="" /> some text <img src="" /> some text  <img src="" /> some text \n
some text <img src="" /> some text `<img src="" /> some text  <img src="" /> some text ';

$count = preg_match_all("/<img/is", $string, $matches);

echo $count;

?>