Извлечь атрибуты ссылки из строки HTML - PullRequest
5 голосов
/ 15 января 2010

Какой лучший способ извлечь HTML из $ var?

пример $ var

$var = "<a href="http://stackoverflow.com/">Stack Overflow</a>"

хочу

$var2 = "http://stackoverflow.com/"

пример: preg_match ();

что еще?

Ответы [ 5 ]

7 голосов
/ 15 января 2010

Вместо того чтобы создавать длинное сложное регулярное выражение, делайте это поэтапно

$str = '<a href="http://stackoverflow.com/"> Stack Overflow</a>';
$str = preg_replace("/.*<a\s+href=\"/","",$str);
print preg_replace("/\">.*/","",$str);

один из способов "без регулярных выражений", с использованием взрыва

$str = '<a href="http://stackoverflow.com/"> Stack Overflow</a>';
$s = explode('href="',$str);
$t = explode('">',$s[1]);
print $t[0];
5 голосов
/ 15 января 2010

Если у вас есть действительная HTML-строка, то функция DOMDocument модуля *1003* loadHTML () будет работать, и вы сможете легко перемещаться по своей структуре. Это хороший способ сделать это, если у вас много HTML-кода для работы.

$doc = new DOMDocument();
$doc->loadHTML('<a href="http://stackoverflow.com/">Stack Overflow</a>');
$anchors = $doc->getElementsByTagName('a');
foreach($anchors as $node) {
    echo $node->textContent;
    if ($node->hasAttributes()) {
        foreach($node->attributes as $a) {
            echo ' | '.$a->name.': '.$a->value;
        }
    }
}

производит следующее:

Stack Overflow | href: http://stackoverflow.com/ 
1 голос
/ 15 января 2010

strip_tags() удаляет HTML из значения переменной. Второй параметр полезен, если вы хотите сделать исключения и оставить определенные теги, например тег p aragraph.

$text = '<p>Paragraph.</p> <!-- boo --> <a href="#">Other text</a>';
echo strip_tags($text); // Paragraph. Other text
echo strip_tags($text, '<p><a>'); // <p>Paragraph.</p> <a href="#">Other text</a>

phpQuery

Если вы хотите избежать регулярных выражений, вы можете использовать phpQuery для обработки значения, а затем использовать селекторы и методы в стиле jQuery для получения значения:

// Bring in phpQuery
require("phpQuery-onefile.php");
// Load up our HTML
phpQuery::newDocumentHTML("<a href='http://sampsonresume.com/'>Homepage</a>");
// Print the HREF attribute of the first Anchor
print pq("a:first")->attr("href"); // http://sampsonresume.com/

Regex

Для поиска URL можно использовать следующее:

$var = "<a href='http://sampsonresume.com/'>Homepage</a>";
preg_match("(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)",$var,$match);
print $match[0]; // http://sampsonresume.com/
0 голосов
/ 11 апреля 2015
<?php
preg_match_All("#<a\s[^>]*href\s*=\s*[\'\"]??\s*?(?'path'[^\'\"\s]+?)[\'\"\s]{1}[^>]*>(?'name'[^>]*)<#simU", $html, $hrefs, PREG_SET_ORDER);

foreach ($hrefs AS $urls){
 print $urls['path']."<br>";
}
?>
0 голосов
/ 15 января 2010

Используйте следующее регулярное выражение:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...