2011-09-15 28 views
0

私は最後のurl値が必要なこの簡単なフレーズを持っています。PHP正規表現の問題

<h4>Location</h4><a href="link">NOT NEEEDED</a> > <a href="link">NOT NEEDED</a> > <a href="link">NEED</a><br /> 

HTMLは一定ですが、レイアウトに関しては変更されるのはリンクの数だけです。

リンクが1つしかない場合でも、いつでもが最終的にのリンクの値を取得しているかどうかは誰にも分かりませんでした。あなたはこの試みることができる

+0

リンクは常に

タグの後に続き、
タグの前にありますか?もしそうなら、preg_matchを使うことができますが、h4を探す必要があります。これは、ページ上にもっと多くのリンクがあり、以下の答えが正しく動作しない可能性があるからです。 – drew010

答えて

1

preg_match_all("/href=\"([^\"]+)\"/",$html,$m); 
$last = array_pop($m[1]); 
3

をそれは何百回も、HTMLを解析するために正規表現を使用しての老い危険を逆流してきました。

私は正規表現は、HTMLのこのサブセットのために十分であろうと確信している一方で、私はまだあなたが...

$dom = new DOMDocument; 

$dom->loadHTML($html); 

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

$lastHref = $anchors->item($anchors->length - 1)->getAttribute('href'); 

CodePadを使用して、より良いオフにしていると信じています。

さらに強力なIMO。

+0

+1ですが、まずbreadcrumbのナビゲーションを保持する親要素(例えば '$ breadcrumb = $ dom-> getElementByID( 'breadcrumb');')を選択し、その要素を使って子のviaタグを取得する必要があります-name( '$ anchors = $ breadcrumb-> getElementsByTagName( 'a');') – feeela

+0

@eeela:それは必要ではありません。 'getElementsByTagName()'は、呼び出されたノードのすべての子孫要素を取得します。 – alex

+0

入力がHTML文書全体である必要があります。そうしないと、ページ全体からすべてのリンクが取得されます。 – feeela

0

私はalexと同意します。一般的に、マークアップを解析するために正規表現を使用する必要はありません。彼の例を使用している間に不正な形式のマークアップに問題がある場合は、きちんとした拡張子を使って最初にクリーンアップしてみてください:http://php.net/manual/en/tidy.examples.basic.php