1

我正在尝试<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);

<img>现在计算var 字符串的第一行中有多少个标签。

$first_line = $array['0'];

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

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

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

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

4

4 回答 4

1

如果你explode逐行做一个简单的,这会给你计数:

$explode = explode('<img ', $array[0]);
echo count($explode);
于 2013-07-05T04:14:34.700 回答
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将结果存储在单个级别(第一次捕获到 index $matches[0],第二次捕获到 index $matches[1])。因此,我们可以轻松检索捕获的数量。

于 2013-07-05T12:10:15.780 回答
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
于 2013-07-05T04:57:11.430 回答
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;

?>
于 2013-07-05T13:28:23.610 回答