0

次のような部分文字列がある場合とない場合がある一連の文字列があります。

<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>

リンクの末尾にある「5」を取得しようとしています (必ずしも 1 桁の数字ではなく、巨大になる可能性があります)。ただし、この文字列は異なります。リンクの前後のテキストは常に異なります。同じになるのは<a class="tag" href="http://www.yahoo.com/と クロージングだけ</a>です。

4

4 に答える 4

1

正規表現を使用preg_match_allして実行できます。<a class="tag" href="http:\/\/(.*)\/(\d+)">

于 2012-08-07T22:21:28.260 に答える
1

parse_url ()を試してみてください。そこからは簡単なはずです。

于 2012-08-07T22:19:09.337 に答える
0

「 basename 」で取得します:

// prints passwd
print basename("/etc/passwd")

そして、使用できるリンクを取得するには:

$xml  = simplexml_load_string( '<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>' );
$attr = $xml->attributes();
print $attr['href'];

最後に: 文字列の構造全体がわからない場合は、次のようにします。

$dom = new DOMDocument;
$dom->loadHTML( '<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>asasasa<a class="tag" href="http://www.yahoo.com/6"> blah blah ...</a>' );
$nodes = $dom->getElementsByTagName('a');
foreach ($nodes as $node) {
    print $node->getAttribute('href');
    print basename( $node->getAttribute('href') );
}

これにより、無効な HTML コードも修正されます。

于 2012-08-07T22:24:29.070 に答える
0

取得する必要があるのは 5 だけなので、非常に簡単です。

$r = pret_match_all('~\/(\d+)"~', $subject, $matches);

その後、最初に一致するグループに入ります。

リンク テキストなどの詳細情報が必要な場合は、HTML パーサーを使用することをお勧めします。

require('Net/URL2.php');

$doc = new DOMDocument();
$doc->loadHTML('<a class="tag" href="http://www.yahoo.com/5"> blah blah ...</a>');
foreach ($doc->getElementsByTagName('a') as $link)
{
    $url = new Net_URL2($link->getAttribute('href'));
    if ($url->getHost() === 'www.yahoo.com') {
        $path = $url->getPath();
        printf("%s (from %s)\n", basename($path), $url);
    }
}

出力例:

5 (from http://www.yahoo.com/5)
于 2012-08-07T22:25:14.483 に答える