質問

こんにちは、私はリンクを抽出したいです <a href="/portal/clients/show/entityId/2121" > そして、私は私をgivs正規表現をしたい/ポータル/クライアント/ショー/実体識別子/ 2121 最後の2121の数が異なる他のリンクであります 任意のアイデア?

役に立ちましたか?

解決

パースリンクの正規表現は、このようなものです。

'/<a\s+(?:[^"'>]+|"[^"]*"|'[^']*')*href=("[^"]+"|'[^']+'|[^<>\s]+)/i'

それがいかに恐ろしい考えると、私は少なくとも、リンクを取得するためにシンプルなHTML DOM を使用することをお勧めします。あなたは、リンクのhrefにいくつかの非常に基本的な正規表現を使用してリンクをチェックすることができます。

他のヒント

シンプルなPHP HTML DOMパーサの例:

// Create DOM from string
$html = str_get_html($links);

//or
$html = file_get_html('www.example.com');

foreach($html->find('a') as $link) {
    echo $link->href . '<br />';
}

XMLをproccessingために正規表現を使用しないでください。 / htmlのに。これはnoreferrer">組み込みDOMパーサをrel="nofollow href="http://php.net/manual/en/class.domdocument.php"

$doc = new DOMDocument();
$doc->loadHTML($htmlAsString);
$xpath = new DOMXPath($doc);
$nodeList = $xpath->query('//a/@href');
for ($i = 0; $i < $nodeList->length; $i++) {
    # Xpath query for attributes gives a NodeList containing DOMAttr objects.
    # http://php.net/manual/en/class.domattr.php
    echo $nodeList->item($i)->value . "<br/>\n";
}

"パース" 私は主にPHPQueryに依存しているHTML: http://code.google.com / P / phpquery / のではなく、その後の正規表現ます。

これは私のソリューションです:

<?php
// get links
$website = file_get_contents("http://www.example.com"); // download contents of www.example.com
preg_match_all("<a href=\x22(.+?)\x22>", $website, $matches); // save all links \x22 = "

// delete redundant parts
$matches = str_replace("a href=", "", $matches); // remove a href=
$matches = str_replace("\"", "", $matches); // remove "

// output all matches
print_r($matches[1]);
?>

私はあなたが常に知ることができませんので、XMLベースのパーサーを使用しないようにお勧めします、 文書/ウェブサイトがうまく形成されているかどうか。

敬具

HTMLからペアリングのリンクは午前のHTMLパーサを使用して行うことができます。

あなたはすべてのリンクを持っている場合は、簡単な最後のスラッシュのインデックスを取得し、あなたがあなたの番号を持っています。 正規表現は必要ありませんん。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top