preg_match_all和regex

时间:2013-02-07 14:46:12

标签: php regex preg-match

我有页面,大约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>

之类的锚的形式输入

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

2 个答案:

答案 0 :(得分: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');
}

以下是我们聊天室发来的消息:

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

您可能希望遍历$ parts [1]而不是$ parts [0]。

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