1

需要一个简单的 preg_match,如果找到,它将在内容中找到“c.aspx”(不带引号),它将返回整个 url。举个例子

$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212">New message</a><br/>';

现在它应该 preg_match "c.aspx" 来自 $content 并将输出为

"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212"

$content 应该有更多的链接,除了“c.aspx”。我不想要他们。我只想要所有具有“c.aspx”的网址。

请让我知道我该怎么做。

4

2 回答 2

7

您使用 DOM 来解析 HTML,而不是正则表达式。您可以使用正则表达式来解析属性值。

编辑:更新示例,以便检查 c.aspx。

$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&amp;n=783622212">New message</a>

<a href="#bar">foo</a>

<br/>';

$dom = new DOMDocument();
$dom->loadHTML($content);

$anchors = $dom->getElementsByTagName('a');

if ( count($anchors->length) > 0 ) {
    foreach ( $anchors as $anchor ) {
        if ( $anchor->hasAttribute('href') ) {
            $link = $anchor->getAttribute('href');
            if ( strpos( $link, 'c.aspx') ) {
                echo $link;
            }
        }
    }
}
于 2009-09-19T21:49:31.700 回答
1

如果你想找到任何带有 c.aspx 的引用字符串:

/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/

但实际上,为了解析大多数 HTML,您最好使用某种 DOM 解析器,这样您就可以确定您匹配的是真正的 href。

于 2009-09-19T21:50:06.597 回答