PHP регулярное выражение, чтобы получить строку внутри тега href - PullRequest
12 голосов
/ 23 октября 2010

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

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

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

Кроме того, я хочу только часть базового URL. То есть с http://www.mydomain.com/page.html я только хочу http://www.mydomain.com/

Ответы [ 9 ]

17 голосов
/ 23 октября 2010

Не используйте регулярные выражения для этого.Вы можете использовать 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);
10 голосов
/ 23 октября 2010
$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
6 голосов
/ 02 августа 2013

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

  1. без кавычек
  2. двойные кавычки
  3. одинарные кавычки

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

5 голосов
/ 14 августа 2013

Используйте ответ @Alec, если вы ищете только базовую часть URL (2-я часть вопроса от @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
4 голосов
/ 23 октября 2010

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

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

/<a href=\"([^\"]*)\">(.*)<\/a>/iU
3 голосов
/ 10 августа 2012

Для замены всех значений 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;
0 голосов
/ 12 мая 2014

Потому что позитивный и негативный внешний вид - это круто

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

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

Array ([0] => theurltoget.com)

0 голосов
/ 23 октября 2010

Это будет обрабатывать случай, когда вокруг URL нет кавычек.

/<a [^>]*href="?([^">]+)"?>/

А если серьезно, не анализируйте HTML с регулярным выражением . Используйте DOM или правильную библиотеку разбора.

0 голосов
/ 23 октября 2010
/href="(https?://[^/]*)/

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

...