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

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

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

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

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

Не используйте для этого регулярное выражение. Вы можете использовать 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); 
 $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 варианта:

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

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

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

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

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

Используйте ответ @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"] $href = $info["scheme"] . "://" . $info["host"] $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"]; $href = $info["scheme"] . "://" . $info["host"] . $info["path"]; Что дает вам:

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

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

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

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

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

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

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

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

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

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

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