web-dev-qa-db-ja.com

PHP <a>タグからリンクを抽出する

可能性のある複製:
PHP文字列操作:hrefの抽出

私はphpを使用していて、コンテンツ=

<a href="www.something.com">Click here</a>

「www.something.com」以外のすべてを取り除く必要があります。これは正規表現で実行できると思います。どんな助けでもありがたいです!ありがとうございました

13
5et

これはSimpleXMLを使用すると非常に簡単です。

$a = new SimpleXMLElement('<a href="www.something.com">Click here</a>');
echo $a['href']; // will echo www.something.com
44
mfonda

これを試してみてください:

$link = '<a href="www.something.com">Click here</a>';
preg_match_all('/<a[^>]+href=([\'"])(?<href>.+?)\1[^>]*>/i', $link, $result);

if (!empty($result)) {
    # Found a link.
    echo $result['href'][0];
}

結果:www.something.com

更新:一致する引用スタイルが必要になり、以下のコメントに対処しています。

17
Tails

私はこれのために次のコードを提案するでしょう:

$str = '<a href="www.something.com">Click here</a>';
preg_match('/href=(["\'])([^\1]*)\1/i', $str, $m);
echo $m[2] . "\n";

出力

www.something.com

これにより、hrefリンクの単一引用符'と二重引用符"の両方が処理されます。

3
anubhava

それが[〜#〜] always [〜#〜]変数のフォーマットであると仮定すると、以下でトリックを実行する必要があります。コンテンツがリンクでない可能性がある場合、これは機能しません。基本的に、2つの引用符で囲まれたデータを探します。

<?php

$string = '<a href="www.something.com">Click here</a>';

$pattern = '/"[a-zA-Z0-9.\/\-\?\&]*"/';

preg_match($pattern, $string, $matches);
print_r($matches);
?>
1
John Poulin

たぶんあなたはあなたの質問をそんなに簡単にするつもりはなかったでしょうが、これはあなたが求めていることを正確に行います:

$link = '<a href="www.something.com">Click here</a>';
$href = substr($link, 9, -16);

$hrefは:

string(17) "www.something.com"

正規表現としては、次のように表現できます。

$href = preg_match('(^<a href="([^"]*)">Click here</a>$)', $link, $matches) ? $matches[1] : die('Invalid input data.');

これは役に立ちましたか?

0
hakre