Php regex для получения строки внутри тега href

Мне нужно регулярное выражение, которое даст мне строку внутри тега href и внутри кавычек.

Например, мне нужно извлечь theurltoget.com в следующем:

<a href="theurltoget.com">URL</a>

Кроме того, мне нужна только часть базового url. То есть from http://www.mydomain.com/page.html Мне нужно только http://www.mydomain.com/

Ответ 1

Не используйте для этого регулярное выражение. Вы можете использовать xpath и встроенные функции php, чтобы получить то, что вы хотите:

    $xml = simplexml_load_string($myHtml);
    $list = $xml->xpath("//@href");

    $preparedUrls = array();
    foreach($list as $item) {
        $item = parse_url($item);
        $preparedUrls[] = $item['scheme'] . '://' .  $item['host'] . '/';
    }
    print_r($preparedUrls);

Ответ 2

$html = '<a href="http://www.mydomain.com/page.html">URL</a>';

$url = preg_match('/<a href="(.+)">/', $html, $match);

$info = parse_url($match[1]);

echo $info['scheme'].'://'.$info['host']; // http://www.mydomain.com

Ответ 3

это выражение будет обрабатывать 3 варианта:

  • нет кавычек
  • двойные кавычки
  • одинарные кавычки

'/href= [ "\']? ([^" \ " > ] +) [" \"]/?

Ответ 4

http://www.the-art-of-web.com/php/parse-links/

Начнем с простейшего случая - хорошо отформатированной ссылки без дополнительных атрибутов:

/<a href=\"([^\"]*)\">(.*)<\/a>/iU

Ответ 5

Используйте ответ @Alec, если вы ищете только базовую часть url (вторая часть вопроса от @David)!

$html = '<a href="http://www.mydomain.com/page.html" class="myclass" rel="myrel">URL</a>';
$url = preg_match('/<a href="(.+)">/', $html, $match);
$info = parse_url($match[1]);

Это даст вам:

$info
Array
(
    [scheme] => http
    [host] => www.mydomain.com
    [path] => /page.html" class="myclass" rel="myrel
)

Итак, вы можете использовать $href = $info["scheme"] . "://" . $info["host"] Что дает вам:

// http://www.mydomain.com  

Когда вы ищете весь URL между href, вы должны использовать другое регулярное выражение, например, регулярное выражение, предоставленное @user2520237.

$html = '<a href="http://www.mydomain.com/page.html" class="myclass" rel="myrel">URL</a>';
$url = preg_match('/href=["\']?([^"\'>]+)["\']?/', $html, $match);
$info = parse_url($match[1]);

это даст вам:

$info
Array
(
    [scheme] => http
    [host] => www.mydomain.com
    [path] => /page.html
)

Теперь вы можете использовать $href = $info["scheme"] . "://" . $info["host"] . $info["path"]; Что дает вам:

// http://www.mydomain.com/page.html

Ответ 6

Для всех значений замены href:

function replaceHref($html, $replaceStr)
{
    $match = array();
    $url   = preg_match_all('/<a [^>]*href="(.+)"/', $html, $match);

    if(count($match))
    {
        for($j=0; $j<count($match); $j++)
        {
            $html = str_replace($match[1][$j], $replaceStr.urlencode($match[1][$j]), $html);
        }
    }
    return $html;
}
$replaceStr  = "http://affilate.domain.com?cam=1&url=";
$replaceHtml = replaceHref($html, $replaceStr);

echo $replaceHtml;

Ответ 8

/href="(https?://[^/]*)/

Я думаю, вы сможете справиться с остальными.

Ответ 9

Потому что положительный и отрицательный Lookbehind классные

/(?<=href=\").+(?=\")/

Он будет соответствовать только тому, что вы хотите, без кавычек

Массив (     [0] = > theurltoget.com)