-1

所以我有一个 HTML 文件作为源,它包含以下代码的几个实例:

<span itemprop="name">NAME</span>

其中 NAME 部分总是改变为不同的东西。

我如何编写一个通过 html 代码的 php 代码,提取“ <span itemprop="name">”和“ </span>”之间的所有名称并将其放入数组中?

我已经尝试过这段代码,但它不起作用:

$prev=$html;

for($i=0; $i<10; $i++){
     $current = explode('<span itemprop="name">', $prev);
     $cur = explode('</span>', $current[1]);
     $names[] =  $cur[0];

     $prev = $current[2];
}

print_r($names);
4

4 回答 4

0

我有点不好意思这样说……但你可以使用正则表达式

preg_match_all('/<span itemprop="name">(.*?)<\/span>/i', $matches);
var_dump($matches); // results are stored in the variable $matches;
于 2013-09-13T14:35:46.423 回答
0

此函数将为我们提供“NAME”

function getbetween($content,$start,$end) {
    $r = explode($start, $content);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
}

此功能将仅替换第一次出现

<?php
function str_replace_once($search, $replace, $subject) {
    $firstChar = strpos($subject, $search);
    if($firstChar !== false) {
        $beforeStr = substr($subject,0,$firstChar);
        $afterStr = substr($subject, $firstChar + strlen($search));
        return $beforeStr.$replace.$afterStr;
    } else {
        return $subject;
    }
}
?>

现在是一个循环

$start = '<span itemprop="name">';
$end = '</span>';
while(strpos($content, $start)) {
    $name = getbetween($content, $start, $end);
    $content = str_replace_once($start.$name.$end, '',$content);
    echo $name.'<br>';
}
于 2013-09-13T14:34:51.907 回答
0

可能比您计划的方式更好的方法是使用 php DOMDocument简单的 php dom或任何 DOM 代表。

这是工作 DOMDocument 代码的示例:

    $doc = new DOMDocument();
    $doc->loadHTML('<html><body><span itemprop="name">1</span><span itemprop="name">2</span><span itemprop="name">3</span></body></html>');
    $finder = new DomXPath($doc);

    $nodes = $finder->query("//*[contains(@itemprop, 'name')]");

    foreach($nodes as $node)
    {   
        echo $node->nodeValue . '<br />';
    }

输出:

1
2
3
于 2013-09-13T14:51:38.157 回答
0

使用这个功能:

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');

echo $parsed; // (result = dog)

参考在此处输入链接描述

于 2017-01-17T06:10:32.963 回答