0

我有大约 10-15 个链接的页面,所有链接都在我的控制范围内,并以名人之类的词结尾我想过滤所有以该词结尾的链接,所以我写了这个

    $regex='|<a.*?href="(.*_celebrity)"|';


    preg_match_all($regex,$result21,$parts);
$links=$parts[0];
foreach($links as $link){
{
    echo $link."<br>";
    mysql_query ("INSERT INTO tablea(linkssas) VALUES ('$link')");
    }

它完成工作并过滤所有以_celebrity结尾但输出未进入数据库的链接。所有链接都输入一行,它不是普通的,它是锚文本的形式,但我想要数据库中的普通链接因为我正在使用 foreach 所以所有链接都应该在单独的行中输入,但所有行都在单行中输入,并且以锚点的形式输入http://xyz.com/edje/jjeieied_celebrity">A</a>

但我只想要数据库中的链接

4

2 回答 2

3

我觉得有义务给你介绍一下DOMDocument

$d = new DOMDocument();
$d->loadHTML($result21);

$suffix = "_celebrity"; $suffix_len = strlen($suffix);

foreach ($d->getElementsByTagName('a') as $link) {
    $href = $link->getAttribute('href');
    if ($href && substr($href, -$suffix_len) === $suffix) {
        // do your insert here
    }
}

或者,使用XPath代替getElementsByTagName

$xp = new DOMXPath($d);

foreach($xp->query('//a[substring(@href, string-length(@href) - 9) = "_celebrity"]') as $node) {
    echo $node->getAttribute('href');
}

这是来自我们聊天室的消息:

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-02-07T14:53:45.670 回答
0

您可能希望循环通过 $parts[1] 而不是 $parts[0]。

http://php.net/manual/en/function.preg-match-all.php

于 2013-02-07T14:50:38.857 回答