使用时删除不需要的文本(getElementsByTagName)


Remove Unwanted Text When Using (getElementsByTagName)

例如,

在使用(getElementsByTagName)时是否可以删除不需要的文本。

这将获取我的网站的电影的发布日期

$spans = $dom->getElementsByTagName('span');
for($i=0; $i <$spans-> length; $i++){
    $itemprop = $spans->item($i)->getAttribute("itemprop");
    if ($itemprop == "datePublished"){
        if ($spans->item($i)->textContent!='-'){
            $res['published'] = trim($spans->item($i)->textContent);
        }
    }
}

但发生的事情不是得到这个。

12 July 2011

它反而得到了这个。

12 July 2011 10:47 PM, UTC

我可以添加的任何代码来删除这部分也是如此。

10:47 PM, UTC

您可以使用正则表达式来提取值:

preg_match('/^'d+ 'w+ 'd+/', $spans->item($i)->textContent, $matches);
list(, $published_date) = $matches;

假设日期的格式没有改变,你应该没有问题。然而,一个更好的主意是使用 DateTime::createFromFormat 解析它。这应该是正确的:

$published_date = DateTime::createFromFormat("d M Y h:i A, e", $spans->item($i)->textContent);

编辑:更新了问题的原始代码,并进行了建议的更改:

$spans = $dom->getElementsByTagName('span');
for($i=0; $i < $spans->length; $i++){
    $itemprop = $spans->item($i)->getAttribute("itemprop");
    if ($itemprop == "datePublished"){
        if ($spans->item($i)->textContent!='-'){
            $text_content = trim($spans->item($i)->textContent);
            $published_date = DateTime::createFromFormat("d M Y h:i A, e", $text_content);
            $res['published'] = $published_date->format("d M Y");
        }
    }
}

如果您知道要获取的字符串将是日期,那么您可以使用 JavaScript Date 对象根据需要设置日期格式,请参阅此链接以获取更多信息:http://www.elated.com/articles/working-with-dates/

正如 Philip 提到的,您可以使用正则表达式。

$pattern = "#([0-9]{2} [a-zA-Z]* [0-9]{4})#i
$subject = "12 July 2013 10:47PM, UTC";
preg_match($pattern, $subject, $matches);
echo $matches[0]; // will find first match
这就是我的做法

,尽管我不能保证您的代码中什么性能更高或更方便。